Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否保证在Sun JVM中返回正确的大小(包括挂起的更新)?_Java_File_File Io - Fatal编程技术网

Java 是否保证在Sun JVM中返回正确的大小(包括挂起的更新)?

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()。然而,这不是实际

在Sun JVM中,FileChannel.size()方法是否保证返回正确大小的文件,包括任何挂起的更新?换句话说,以下测试是否保证通过(假设没有其他内容写入文件):


没有强有力的保证,依操作系统而定。但从我看来,大小应该相等

更多:

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);