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