2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

FileChannel如何讀寫文件?

更新時間:2023-03-27 來源:黑馬程序員 瀏覽量:

IT培訓班

獲取FileChannel不能直接打開,必須通過 FileInputStream、FileOutputStream 或者 RandomAccessFile 來獲取 FileChannel,它們都有 getChannel 方法。

  通過FileInputStream獲取的channel只能讀

  通過FileOutputStream獲取的channel只能寫

  通過RandomAccessFile是否能讀寫根據構造RandomAccessFile 時的讀寫模式決定。

1.讀取

會從channel讀取數據填充ByteBuffer,返回值表示讀到了多少字節,-1 表示到達了文件的末尾。

int readBytes = channel.read(buffer);

2.寫入

寫入的正確代碼如下:

ByteBuffer buffer = ...;
buffer.put(...); // 存入數據
buffer.flip();   // 切換讀模式

while(buffer.hasRemaining()) {
    channel.write(buffer);
}

在 while 中調用 channel.write 是因為 write 方法并不能保證一次將 buffer 中的內容全部寫入 channel

3.關閉

channel 必須關閉,不過調用了 FileInputStream、FileOutputStream 或者 RandomAccessFile 的 close 方法會間接地調用 channel 的 close 方法。

4.位置

獲取當前位置的示例代碼如下:

long pos = channel.position();

設置當前位置

long newPos = ...;
channel.position(newPos);

設置當前位置時,如果設置為文件的末尾會讀取會返回 -1 。這時寫入,會追加內容,但要注意如果 position 超過了文件末尾,再寫入時在新內容和原末尾之間會有空洞(00)。

5.大小

使用 size 方法獲取文件的大小

6.強制寫入

操作系統出于性能的考慮,會將數據緩存,不是立刻寫入磁盤。可以調用 force(true) 方法將文件內容和元數據(文件的權限等信息)立刻寫入磁盤。





分享到:
在線咨詢 我要報名
和我們在線交談!