NIO系列(三) FileChannel檔案通道

2021-08-02 22:50:54 字數 1717 閱讀 4600

檔案通道filechannel,是堵塞的。作用是檔案的連線和讀取。

filechannel不能直接開啟,我們可以使用randomaccessfile、inputstream、outputstream來獲取filechannel例項。下面是randomaccessfile獲取例項

randomaccessfile afile = new randomaccessfile("nio-data.txt","rw");

filechannel inchannel = afile.getchannel();

可以使用buffer快取來讀寫資料

bytebuffer bbuffer = bytebuffer.allocate(48);

int readsize;

do while (readsize != -1);

string newdata = "\nnewstring to write to file..." + system.currenttimemillis();

bytebuffer bbuffer = bytebuffer.allocate(48);

filechannel.position(filechannel.size()); // 定位末尾,接著輸入

bbuffer.put(newdata.getbytes("utf-8"));

bbuffer.clear();

while (bbuffer.hasremaining())

bbuffer.flip();

filechannel的size方法可以獲得例項返回的檔案大小。如:

long filesize= channel.size();

filechannel的truncate方法可以擷取檔案。擷取檔案時,檔案將指定長度後面的部分將被刪除。

channel.truncate(1024);

這個例子擷取檔案的前1024個位元組。

filechannel的force方法可以將通道中的快取資料強制寫到硬碟上,在作業系統中預設寫入是呼叫write(),但是它會有快取存在,可以呼叫sync和fsync函式,它會把快取的資料強制寫入。如:

channel.force(true);

public classfilechanneltest catch(filenotfoundexception e) 

}/**

* filechannel讀資料

*/public void readfilechannel() while(readsize!= -1);

}catch(ioexception e) finallycatch(ioexception e) }}

/*** filechannel寫資料

*/public void writefilechannel()

bbuffer.flip();

}catch(unsupportedencodingexception e) catch(ioexception e) finallycatch(ioexception e) }}

public static void main(string args)

}

io nio socket步步為營(三)NIO

原理 運用reactor模式 selector是核心 分發器a multiplexor of selectablechannel objects。能檢測任意個註冊過的channel上的事件,並分發事件,內部實現不用考慮,封裝的好處。client沒必要用nio,使用中的client server,需要...

深入理解NIO三大核心

limit 指定剩餘資料容量 剩餘可儲存資料空間 capacity 可以儲存在緩衝區的最大資料容量 public class bufferplay output 呼叫buffer.get buffer 復位 buffer.clear output 呼叫buffer.clear buffer 關閉管道...

nio 三 檔案讀取和寫入

讀取 path p4 paths.get e 版本控制1 服務端 2.txt try bufferedreader reader files.newbufferedreader p4,standardcharsets.utf 8 簡化版讀取 listcontents files.readalllin...