内存映射输出流生成带尾随零的输出文件

时间:2013-12-10 13:00:21

标签: java file stream memory-mapped-files java.nio.file

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

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

当要写入文件的元素总量是一次映射到文件的块大小的倍数时,我的实现工作顺利。然而,当情况并非如此时 - 由于流不能决定/知道用户何时将停止写入,因此不会经常出现这种情况 - 映射块中的剩余空间也以尾随零的形式转储到文件中。我该如何避免输出文件中的这些尾随零?

提前致谢。

1 个答案:

答案 0 :(得分:1)

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