我試圖用MappedMemoryBuffer
從文件中存儲/刪除部分字節。 Atm中,我使用了以下方法:我在緩衝區中有一個位置標記文件中的數據結尾(緩衝區比文件稍大一些以容納追加)。每個數據塊都是固定長度的,比方說200個字節。Java NIO - 截斷MappedByteBuffer
我首先關心的是文件末尾的「標記」。我可以看到兩種方法:
- 使用某種標記來表示實際數據的結束,而文件大小可能更大(由於我爲了追加原因而保持略大一點)。想出一些獨特的字節序列可能會很棘手。
- 務必確保我們讀入的文件是「完整的」,即如果該文件是2000字節,這意味着它中有10條消息,僅此而已。這是更加棘手我想,我們必須不斷地截斷文件大小和開放的內存緩衝區是相當繁瑣(一個不能截斷開放的內存映射文件的文件大小)
這就是爲什麼我會瘦更多的是針對某個人,除非有人知道更好的方法?
現在,雖然追加很簡單,但刪除隨機數據塊並不那麼簡單。我想要做的是將數據轉移到覆蓋已刪除的消息。我只是將所有字節移動到消息的右側,直到它的開頭。
一般來說,這是正確的策略,還是會有人提出其他的或改進的概念?
移動文件中的數據是一個壞主意。如果塊的順序不重要,可以將最後一塊移動到已刪除塊的位置(因爲塊的大小相同)。否則,你應該添加一種方法來將塊標記爲刪除並清除,一旦你有明顯稀疏的塊。 – Holger
由於性能原因或更多,正在改變? – Bober02
主要表現。但它也與您的意圖是安全的,當你的應用程序在操作之間中斷時。 – Holger