为什么SeekableByteChannel.read()总是在linux中返回-1?

时间:2014-03-31 06:45:57

标签: java linux

在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上安装它们之后,问题就出现了。 谢谢你的帮助。

0 个答案:

没有答案