我试图用MappedMemoryBuffer
从文件中存储/删除部分字节。 Atm中,我使用了以下方法:我在缓冲区中有一个位置标记文件中的数据结尾(缓冲区比文件稍大一些以容纳追加)。每个数据块都是固定长度的,比方说200个字节。Java NIO - 截断MappedByteBuffer
我首先关心的是文件末尾的“标记”。我可以看到两种方法:
- 使用某种标记来表示实际数据的结束,而文件大小可能更大(由于我为了追加原因而保持略大一点)。想出一些独特的字节序列可能会很棘手。
- 务必确保我们读入的文件是“完整的”,即如果该文件是2000字节,这意味着它中有10条消息,仅此而已。这是更加棘手我想,我们必须不断地截断文件大小和开放的内存缓冲区是相当繁琐(一个不能截断开放的内存映射文件的文件大小)
这就是为什么我会瘦更多的是针对某个人,除非有人知道更好的方法?
现在,虽然追加很简单,但删除随机数据块并不那么简单。我想要做的是将数据转移到覆盖已删除的消息。我只是将所有字节移动到消息的右侧,直到它的开头。
一般来说,这是正确的策略,还是会有人提出其他的或改进的概念?
移动文件中的数据是一个坏主意。如果块的顺序不重要,可以将最后一块移动到已删除块的位置(因为块的大小相同)。否则,你应该添加一种方法来将块标记为删除并清除,一旦你有明显稀疏的块。 – Holger
由于性能原因或更多,正在改变? – Bober02
主要表现。但它也与您的意图是安全的,当你的应用程序在操作之间中断时。 – Holger