我怎样才能绕过java ByteBuffer大小不能改变的事实



我将二进制数据从块文件中读取到ByteBuffer中,然后在ByteBuffer中处理数据。我喜欢使用ByteBuffer,因为我可以使用order()方法来正确读出short和integer。

稍后,我必须将新的/修改的数据写入文件。我们的想法是再次使用ByteBuffer并利用它的put方法。然而,我不知道提前知道所需的大小,我可以计算出来,但这意味着解析数据两次。或者,我可以使用ByteArrayOutputStream,但我必须编写方法来处理写BigEndian/LittleEndian整数等。

你有什么建议,有没有第三种选择

我可以想到两种(其他)方法:

  • 如果问题是你不能提前预测文件大小,那就不要。使用File.length()Files.size(Path)查找文件大小

  • 如果你可以用块处理文件,那么读取一个块,处理它,然后把它写到一个新的文件。根据您的处理,您甚至可以就地更新ByteBuffer。如果不是,那么(大概)输出块的大小与输入块的大小成正比。


我推荐什么?

如果没有你想解决的问题的更多细节,我不准备推荐任何东西;即处理的性质。

如果您的用例保证文件在处理过程中不会更改,那么使用MappedByteBuffer 可能是一个好主意。

最新更新