Java 是否保证在Sun JVM中返回正确的大小(包括挂起的更新)?
在Sun JVM中,FileChannel.size()方法是否保证返回正确大小的文件,包括任何挂起的更新?换句话说,以下测试是否保证通过(假设没有其他内容写入文件):Java 是否保证在Sun JVM中返回正确的大小(包括挂起的更新)?,java,file,file-io,Java,File,File Io,在Sun JVM中,FileChannel.size()方法是否保证返回正确大小的文件,包括任何挂起的更新?换句话说,以下测试是否保证通过(假设没有其他内容写入文件): 没有强有力的保证,依操作系统而定。但从我看来,大小应该相等 更多: linux上的force(true)是通过在windows上实现的 但是,您没有检查write是否已完成写入(buffer.haslaining()),我不确定是否有任何impl允许异步写入,良好的点re。buffer.haslaining()。然而,这不是实际
没有强有力的保证,依操作系统而定。但从我看来,大小应该相等 更多: linux上的force(true)是通过在windows上实现的
但是,您没有检查write是否已完成写入(
buffer.haslaining()
),我不确定是否有任何impl允许异步写入,良好的点re。buffer.haslaining()。然而,这不是实际的代码,只是一个例子,所以我假设一些数据在我调用write(buffer)的时候被写入。通常force()
要求操作系统将自己的缓冲区刷新到硬件上,因此它不会影响在同一文件描述符上运行的size()
函数。不过,我可以假设这是真的(原力前后的大小)。
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
FileChannel fileChannel = randomAccessFile.getChannel();
fileChannel.write(buffer);
long size1 = fileChannel.size();
fileChannel.force(true);
long size2 = fileChannel.size();
assertEquals(size1, size2);