我正在使用java.nio包在Java中实现一个内存映射流。它将一块内存映射到输出文件,当需要将更多元素写入输出文件时,它会映射另一个块,依此类推。
w_buffer = channel.map(FileChannel.MapMode.READ_WRITE, w_cycle*bufferSize, bufferSize);
当要写入文件的元素总量是一次映射到文件的块大小的倍数时,我的实现工作顺利。然而,当情况并非如此时 - 由于流不能决定/知道用户何时将停止写入,因此不会经常出现这种情况 - 映射块中的剩余空间也以尾随零的形式转储到文件中。我该如何避免输出文件中的这些尾随零?
提前致谢。
答案 0 :(得分:1)
您可以使用channel.truncate(size)将通道截断为给定大小,但是这可以与channel.map()结合使用,这是值得怀疑的。很多channel.map依赖于底层操作系统。在同一文件上混合“文件访问”和“内存映射访问”通常不是一个好主意。其他解决方案可能是在每个块的开头都有一个“大小使用”值。