日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java filechannel 空_FileChannel的基本操作

發布時間:2024/10/6 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java filechannel 空_FileChannel的基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這節課,我介紹一下FileChannel的基本操作。

FileChannel既簡單,也不重要,只是它作為Java NIO的一部分,花一點時間去看看總是沒有壞處的。

Java NIO中的FileChannel是一個連接到文件的通道。可以通過文件通道讀寫文件。FileChannel無法設置為非阻塞模式,它總是運行在阻塞模式下。

在使用FileChannel之前,必須先打開它。但是,我們只能通過使用一個InputStream、OutputStream或RandomAccessFile來獲取一個FileChannel實例:

RandomAccessFile f = new RandomAccessFile("hehe.txt");

f.getChannel();

// 或者這樣: FileInputStream fin = new FileInputStream("hehe.txt");

fin.getChannel();

讀寫Channel

讀寫Channel的操作與其他的channel沒有什么區別,簡單演示一下。下面的例子展示了一個從文件A中讀取內容,并且寫到B中的操作:

ByteBuffer buf = ByteBuffer.allocate(48);

buf.clear();

channelA.read(buf);

buf.flip();

while(buf.hasRemaining()) {

channelB.write(buf);

}

其他操作

1、用完FileChannel后關閉。

public final void close()

2、有時可能需要在FileChannel的某個特定位置進行數據的讀/寫操作。可以通過調用position()方法獲取FileChannel的當前位置。也可以通過調用position(long pos)方法設置FileChannel的當前位置。例如:

long pos = channel.position();

channel.position(pos + 100);

如果將位置設置在文件結束符之后,然后試圖從文件通道中讀取數據,讀方法將返回-1,這代表了文件結束。

如果將位置設置在文件結束符之后,然后向通道中寫數據,文件將撐大到當前位置并寫入數據,這可能導致“文件空洞”,磁盤上物理文件中寫入的數據間有空隙,撐大的那一部分會以0填充,但卻不占用實際的磁盤空間。

3、FileChannel實例的size()方法將返回該實例所關聯文件的大小。使用size()方法。

4、截取一個文件。截取文件時,文件將中指定長度后面的部分將被刪除。如:

channel.truncate(1024);

這個例子截取文件的前1024個字節。

5、將通道里尚未寫入磁盤的數據強制寫到磁盤上。出于性能方面的考慮,操作系統會將數據緩存在內存中,所以無法保證寫入到FileChannel里的數據一定會即時寫到磁盤上。要保證這一點,需要調用force()方法。

force()方法有一個boolean類型的參數,指明是否同時將文件元數據(權限信息等)寫到磁盤上。下面的例子同時將文件數據和元數據強制寫到磁盤上:

channel.force(true);

好了。今天就講這些吧。很簡單,大家掃一眼就行了。

文件空洞這事,想深入研究的可以去研究一下,這牽扯到文件系統的具體實現。實際應用中不要這么干,沒有任何好處。

總結

以上是生活随笔為你收集整理的java filechannel 空_FileChannel的基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。