在linux中,我希望在使用SeekableByteChannel将一些行添加到目标文件时读取delta。 如下所示:
1,运行代码,
2,在目标文件中添加一些行,然后我发现" seekableByteChannel.size()== size"永远都是真的。
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SeekableByteChannel;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.EnumSet;
import java.nio.file.StandardOpenOption;
public class Test2 {
public static void main( String[] args ) throws InterruptedException {
Path path = Paths.get( "/root/desktop/file1" );
long size = path.toFile().length();
// read a file using SeekableByteChannel
try (SeekableByteChannel seekableByteChannel = Files
.newByteChannel( path, EnumSet.of( StandardOpenOption.READ ) )) {
ByteBuffer buffer = ByteBuffer.allocate( 1 );
String encoding = System.getProperty( "file.encoding" );
buffer.clear();
seekableByteChannel.position(size);
while(seekableByteChannel.size() == size) {
Thread.sleep( 1000 );
}
while ( seekableByteChannel.read( buffer ) > 0 ) {
buffer.flip();
System.out.print( Charset.forName( encoding ).decode( buffer ) );
buffer.clear();
}
}
catch ( IOException ex ) {
System.err.println( ex );
}
}
}
但是Windows没有这个问题
我的jdk版本:1.7.0._45
因为我在VMFS5上安装了所有机器,所以在我更改为在NFS上安装它们之后,问题就出现了。 谢谢你的帮助。