檔案通道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...