Bối cảnh: Tôi đang viết mã C điều khiển vi mô để viết tệp EBML. EBML giống như một XML nhị phân với các phần tử lồng nhau, nhưng thay vì các thẻ bắt đầu và kết thúc, có ID bắt đầu, độ dài và sau đó là dữ liệu. Tôi đang viết điều này vào Flash bên ngoài trong một ứng dụng năng lượng thấp, vì vậy tôi muốn giữ cho các truy cập flash ở mức tối thiểu. Bộ nhớ cũng bị giới hạn, bởi vì không có gì là dễ dàng.
Khi tôi có thể giữ toàn bộ phần tử EBML trong bộ nhớ, thì việc tạo nó trở nên dễ dàng vì tôi có thể quay lại và điền vào độ dài của mỗi phần tử sau khi tôi biết độ dài đó là bao nhiêu. Vấn đề là phải làm gì khi tôi không thể giữ toàn bộ thành phần trong bộ nhớ. Các tùy chọn tôi thấy là:
- Viết những gì tôi biết, sau đó quay lại và thêm độ dài (dễ nhất, nhưng thêm nhiều truy cập flash hơn tôi muốn)
- Tính toán độ dài của mỗi phần tử trước khi tôi bắt đầu viết nó (tương đối dễ, nhưng nhiều thời gian xử lý)
- Chuyển đổi chế độ khi bộ nhớ của tôi đầy, để sau đó tôi tiếp tục thông qua dữ liệu, nhưng chỉ để tính độ dài cho các phần tử đã được dành riêng trong bộ nhớ. Sau đó viết những gì tôi có trong bộ nhớ, và quay lại và tiếp tục xử lý dữ liệu từ nơi tôi rời đi. (Tùy chọn yêu thích của tôi cho đến nay)
- Cung cấp cho các phần tử độ dài trường hợp tối đa hoặc tệ nhất khi chúng cần được viết và độ dài cuối cùng của chúng chưa được biết. (Dễ dàng hơn ở trên, nhưng có thể gây phản tác dụng và lãng phí không gian)
Câu hỏi: Có vẻ như đây là một vấn đề tương đối phổ biến mà mọi người đã nghĩ đến. Tôi biết nó cũng có thể xảy ra khi hình thành một số gói dữ liệu. Có một kỹ thuật tốt hơn / phổ biến hơn / được chấp nhận hơn mà tôi đang thiếu ở đây không? Hay chỉ là một số thuật ngữ cho vấn đề mà tôi có thể tìm kiếm?