2013-05-09 52 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