"Vấn đề" nắm rõ cách các tệp được ghi ra phương tiện lưu trữ theo kiểu byte theo byte.
Trong biểu diễn cơ bản nhất của nó, một tệp không có gì khác ngoài một chuỗi các byte được ghi ra đĩa (còn gọi là phương tiện lưu trữ). Vì vậy, chuỗi ban đầu của bạn trông giống như:
Address Value
0x00 `a`
0x01 `a`
0x02 `a`
0x03 `b`
0x04 `d`
0x05 `d`
0x06 `d`
Và bạn muốn chèn C
vào vị trí 0x04. Điều đó yêu cầu chuyển byte 4 - 6 xuống một byte để bạn có thể chèn giá trị mới. Nếu bạn không, bạn sẽ ghi đè lên giá trị hiện tại là 0x04 không phải là điều bạn muốn.
Address Value
0x00 `a`
0x01 `a`
0x02 `a`
0x03 `b`
0x04 `C`
0x05 `d`
0x06 `d`
0x07 `d`
Vì vậy, lý do tại sao bạn phải viết lại phần đuôi của tệp sau khi bạn chèn một giá trị mới là vì không có bất kỳ khoảng trống nào trong tệp để chấp nhận giá trị được chèn. Nếu không, bạn sẽ viết quá nhiều những gì đã có.
Phụ lục 1 : Nếu bạn muốn thay thế giá trị b
bằng C
thì bạn không cần phải viết lại phần đuôi của chuỗi. Thay thế một giá trị bằng một giá trị có kích thước tương tự không yêu cầu viết lại.
Phụ lục 2 : Nếu bạn muốn thay thế chuỗi ab
bằng C
thì bạn sẽ cần phải viết lại phần còn lại của tệp khi bạn đã tạo một khoảng trống trong tệp.
Phụ lục 3 : Cấu trúc cấp khối đã được tạo để giúp xử lý các tệp lớn dễ xử lý hơn. Thay vì phải tìm không gian liền kề có giá trị 1M cho tệp của bạn, giờ đây bạn chỉ cần tìm các khối có sẵn trị giá 1M để ghi vào thay thế.
Về lý thuyết, bạn có thể xây dựng một hệ thống tập tin thực hiện liên kết từng byte tương tự như các khối cung cấp. Sau đó, bạn có thể chèn một byte mới bằng cách cập nhật thành | từ con trỏ tại điểm thích hợp. Tôi sẽ mạo hiểm đoán rằng hiệu suất trên đó sẽ khá kém.
Như Grandmaster B đã đề xuất , hãy sử dụng hình ảnh của domino xếp chồng để hiểu trực quan cách tệp được biểu diễn.
Bạn không thể chèn một domino khác trong dòng domino mà không khiến mọi thứ sụp đổ. Bạn phải tạo không gian cho domino mới bằng cách di chuyển những người khác xuống dòng. Di chuyển domino xuống dòng tương đương với việc viết lại đuôi của tệp sau điểm chèn.