Tôi sẽ xem xét xác định cấu trúc con mà cấp cao hơn sử dụng để lưu trữ dữ liệu, giống như một hệ thống tệp nhỏ bên trong tệp.
Ví dụ: mặc dù định dạng tệp của bạn sẽ lưu trữ dữ liệu ứng dụng cụ thể, tôi sẽ xem xét xác định hồ sơ/luồng v.v. bên trong tệp theo cách mã ứng dụng bất khả tri có thể hiểu bố cục của tập tin, nhưng không phải tất nhiên hiểu được tải trọng mờ đục.
Hãy chuẩn bị kỹ hơn một chút. Hãy xem xét các cách lưu trữ dữ liệu thông thường trong bộ nhớ: thông thường chúng có thể được luộc xuống các mảng/danh sách có thể mở rộng liền kề, biểu đồ con trỏ/tham chiếu và nhị phân dữ liệu ở định dạng cụ thể.
Do đó, có thể có hiệu quả để xác định định dạng tệp nhị phân dọc theo các dòng tương tự. Sử dụng tiêu đề bản ghi cho biết độ dài và thành phần của dữ liệu sau, cho dù đó là dạng mảng (danh sách các bản ghi được nhập chính xác), tham chiếu (bù đắp cho các bản ghi khác trong tệp), hoặc blobs dữ liệu (ví dụ: dữ liệu chuỗi trong một mã hóa cụ thể, nhưng không chứa bất kỳ tham chiếu nào).
Nếu được thiết kế cẩn thận, điều này có thể cho phép định dạng tệp không chỉ để duy trì dữ liệu trong và ngoài tất cả trong một lần mà còn trên cơ sở gia tăng khi cần thiết. Nếu cấu trúc con được thiết kế đúng cách, nó có thể là ứng dụng thuyết bất khả tri nhưng vẫn cho phép ví dụ: một ứng dụng thu gom rác được viết, hiểu các đốm màu, mảng và các loại bản ghi tham chiếu, và có thể theo dõi qua tệp và loại bỏ các bản ghi không sử dụng (tức là các bản ghi không còn được trỏ tới).
Đó chỉ là một ý tưởng. Những nơi khác để tìm kiếm ý tưởng nằm trong các thiết kế hệ thống tệp chung, hoặc các chiến lược lưu trữ vật lý cơ sở dữ liệu quan hệ.
Tất nhiên, tùy thuộc vào yêu cầu của bạn, điều này có thể là quá mức cần thiết. Bạn có thể chỉ đơn giản là sau một định dạng nhị phân để lưu trữ dữ liệu trong bộ nhớ, trong trường hợp đó, cách tiếp cận để xem xét là các bản ghi được gắn thẻ.
Trong phương pháp này, mọi phần dữ liệu được bắt đầu bằng thẻ. Thẻ cho biết loại dữ liệu sau ngay lập tức và có thể là chiều dài và tên của nó. Danh sách có thể được thêm vào thẻ "danh sách cuối" không có trọng tải. Thẻ có thể có số nhận dạng được nhúng, do đó các thẻ không được hiểu có thể bị bỏ qua bởi cơ chế tuần tự hóa khi đọc. Thứ này giống như XML theo khía cạnh này, ngoại trừ việc sử dụng thành ngữ nhị phân thay thế.
Thực ra, XML là một nơi tốt để tìm kiếm tuổi thọ lâu dài của định dạng tệp. Nhìn vào khả năng không gian tên của nó. Nếu bạn xây dựng mã đọc và viết một cách cẩn thận, có thể viết các ứng dụng lưu giữ vị trí và nội dung của dữ liệu được gắn thẻ (đệ quy) mà chúng không hiểu, có thể do nó được viết bởi phiên bản sau của cùng một ứng dụng.
PNG là một ví dụ. Những người khác có cấu trúc tương tự là IFF (Định dạng tệp trao đổi, chủ yếu được sử dụng trên Commodore Amiga) và RIFF (ví dụ: WAV hoặc AVI). – BlaM