1

我正在使用 java.nio 包在 Java 中实现内存映射流。它将一块内存映射到输出文件,当需要将更多元素写入输出文件时,它会映射另一个块,依此类推。

w_buffer = channel.map(FileChannel.MapMode.READ_WRITE, w_cycle*bufferSize, bufferSize);

当要写入文件的元素总量是一次映射到文件的块大小的倍数时,我的实现工作顺利。但是,如果不是这种情况——这种情况不会经常发生,因为流无法决定/知道用户何时停止写入——映射块中的剩余空间也会以尾随零的形式转储到文件中。我应该如何避免输出文件中的这些尾随零?

提前致谢。

4

1 回答 1

1

您可以使用 channel.truncate(size) 将通道截断为给定的大小,但是与 channel.map() 结合使用是否可以移植是值得怀疑的。很多 channel.map 依赖于底层操作系统。在同一个文件上混合“文件访问”和“内存映射访问”通常不是一个好主意。其他解决方案可能是在每个块的开头有一个“使用大小”的值。

于 2013-12-10T16:01:19.980 回答