首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java截断MappedByteBuffer

Java截断MappedByteBuffer
EN

Stack Overflow用户
提问于 2014-03-04 11:29:56
回答 1查看 472关注 0票数 0

我试图使用MappedMemoryBuffer从文件中存储/删除部分字节。Atm,我使用以下方法:我在缓冲区中有一个位置,标记文件中数据的结尾(缓冲区比文件稍大一些,以便于附加)。每个数据块都是固定长度的,比如说200个字节。

我首先关心的是“标记”文件的结尾。我可以看到这方面的两种方法:

  1. 使用某种标记来表示实际数据的结尾,而文件大小可以更大(因为由于附加的原因,我保持它稍微大一点)。想出一些独特的字节序列可能会很棘手。
  2. 始终确保我们读取的文件是“完整的”,也就是说,如果该文件是2000字节,这意味着其中有10条消息,而没有更多的消息。我认为这更棘手,因为我们必须不断地截断文件大小,而使用打开的内存缓冲区则非常麻烦(不能用打开的内存映射文件截断文件大小)。

这就是为什么我会更倾向于一个,除非有人知道更好的方法?

现在,虽然附加非常简单,但删除随机数据块并不那么简单。我想做的是改变数据以覆盖已删除的消息。我只是把所有的字节移到消息的右边,到它的开头。

一般说来,这是正确的策略吗,还是有人会对这一概念提出其他建议或改进?

EN

回答 1

Stack Overflow用户

发布于 2014-03-04 11:56:14

您可以在FileChannel (或File或其他什么地方,只要您知道它是您的文件)上使用自定义包装类,并使它提供映射,甚至自己编写映射。

在这个类中,跟踪大小。让它实现Closeable。当您对其进行.close()时,取消映射所有内容并将其截断/展开到适当的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22170740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档