我如何处理java ByteBuffer大小无法更改的事实

时间:2015-09-22 08:09:09

标签: java nio bytebuffer

我将块中文件中的二进制数据读入ByteBuffer,然后处理ByteBuffer中的数据。我喜欢使用ByteBuffer,因为我可以使用order()方法正确读出短整数和整数。

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

你推荐什么,有第三种选择吗?

2 个答案:

答案 0 :(得分:0)

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

  • 如果问题是您无法预测高级文件的大小,则不要。而是使用File.length()Files.size(Path)来查找文件大小。

  • 如果您可以以块的形式处理文件,则读取一个块,处理它,然后将其写入新文件。根据您的处理情况,您甚至可以就地更新ByteBuffer。如果没有,则(推测)输出块的大小与输入块的大小成比例。

我推荐什么?

如果没有您要解决的问题的更多详细信息,我不准备推荐任何内容;即处理的性质。

答案 1 :(得分:0)

如果您的用例保证文件在处理过程中不会发生变化,那么可能最好使用MappedByteBuffer