2013-05-09 54 views
2

FileChannel.open(path)方法返回什么样的FileChannel对象?RandomAccessFile vs FileChannel.open(path);

它仍然是随机访问允许,就像它是如下?

RandomAccessFile ra = new RandomAccessFile("RandomIndeed","rw"); 
    FileChannel fc1 = ra.getChannel(); 

什么是和下面的实例fcfc1之间的区别:

FileChannel fc = FileChannel.open(path); 

基本上我想知道会有怎样的两个对象之间的差异上面创建的,因此fc1fc

在此先感谢。

+0

两个调用(至少对于Unix文件系统)都返回相同的对象(sun.nio.ch.FileChannelImpl)。 – Perception 2013-05-09 15:32:09

回答

0

FileChannel实例得到了RandomAccessFile实例承载了它已经创建的对象的随机访问行为,在这种情况下fc1已同步与ra对象。你可以看到它在Javadoc

更改通道的位置说明,无论是明确或通过读取或写入 字节,将改变原 对象的文件位置,反之亦然。通过文件 通道更改文件的长度将改变通过始发对象看到的长度,反之亦然 。通过写入字节来更改文件的内容将改变原始对象看到的内容,反之亦然。

然而FileChannel实例,它是利用FileChannel.open()这是fc创建没有这种行为。对于从Streams获得的FileChannel实例,这是正确的。它只能保证文件的视图在由同一个程序创建的对象之间是一致的。希望这可以帮助你。

+0

FileChannel实现SeekableByteChannel,用于“随机”导航文件。怎么来的?这意味着fc也有属于SeekableByteChannel接口的方法。 – Rollerball 2013-05-09 16:29:36

+0

@滚球,你使用的是JDK7吗?对不起,我回答了涉及JDK 6实现的问题。在我认为的7之前,FileChannel没有实现SeekableByteChannel。 – 2013-05-09 16:39:30