我将块中文件中的二进制数据读入ByteBuffer,然后处理ByteBuffer中的数据。我喜欢使用ByteBuffer,因为我可以使用order()方法正确读出短整数和整数。
稍后我必须将新的/修改过的数据写入文件。想法是再次使用ByteBuffer并使用其put方法。但是我不知道提前需要知道的大小,我可以解决它,但这意味着解析数据两次。或者我可以使用ByteArrayOutputStream但是我必须编写方法来处理写入BigEndian / LittleEndian整数ectera。
你推荐什么,有第三种选择吗?
答案 0 :(得分:0)
我可以想到两种(其他)方法:
如果问题是您无法预测高级文件的大小,则不要。而是使用File.length()
或Files.size(Path)
来查找文件大小。
如果您可以以块的形式处理文件,则读取一个块,处理它,然后将其写入新文件。根据您的处理情况,您甚至可以就地更新ByteBuffer
。如果没有,则(推测)输出块的大小与输入块的大小成比例。
我推荐什么?
如果没有您要解决的问题的更多详细信息,我不准备推荐任何内容;即处理的性质。
答案 1 :(得分:0)
如果您的用例保证文件在处理过程中不会发生变化,那么可能最好使用MappedByteBuffer
。