我将二进制数据从块文件中读取到ByteBuffer中,然后在ByteBuffer中处理数据。我喜欢使用ByteBuffer,因为我可以使用order()方法来正确读出short和integer。
稍后,我必须将新的/修改的数据写入文件。我们的想法是再次使用ByteBuffer并利用它的put方法。然而,我不知道提前知道所需的大小,我可以计算出来,但这意味着解析数据两次。或者,我可以使用ByteArrayOutputStream,但我必须编写方法来处理写BigEndian/LittleEndian整数等。
你有什么建议,有没有第三种选择
我可以想到两种(其他)方法:
-
如果问题是你不能提前预测文件大小,那就不要。使用
File.length()
或Files.size(Path)
查找文件大小 -
如果你可以用块处理文件,那么读取一个块,处理它,然后把它写到一个新的文件。根据您的处理,您甚至可以就地更新
ByteBuffer
。如果不是,那么(大概)输出块的大小与输入块的大小成正比。
我推荐什么?
如果没有你想解决的问题的更多细节,我不准备推荐任何东西;即处理的性质。
如果您的用例保证文件在处理过程中不会更改,那么使用MappedByteBuffer
可能是一个好主意。