導入Java . io . file;
導入Java . io . filereader;
導入Java . io . random access file;
導入Java . nio . byte buffer;
導入Java . nio . mappedbytebuffer;
導入Java . nio . channels . file channel;
公共類ReadBig {
公共靜態字符串fff = " C:\ \ MQ \ \ read \ \ from . XML ";
公共靜態void main1(String[] args)引發異常{
final int BUFFER _ SIZE = 0x300000//緩沖區大小為3M。
文件f =新文件(fff);
/**
*
*映射(文件通道。MapMode模式,長位置,長尺寸)
*
*模式-根據文件通道中定義的只讀、讀/寫或專用(寫入時復制)來映射文件。MapMode類。
*只讀、讀寫或私有中的壹種。
*
* position-文件中映射區域開始的位置;必須為非負數
*
* size-要映射的區域的大小;必須為非負且不大於整數。MAX_VALUE。
*
*所以如果妳想讀文件的後半部分,就像例子中寫的那樣;如果要讀取正文後1/8的內容,需要寫map(文件通道。mapmode.read _ only
*全長()*7/8,全長()/8)
*
*要讀取壹個文件的所有內容,需要編寫map(文件通道。mapmode.read _ only,0,f.length())這樣。
*
*/
MappedByteBuffer input buffer = new random access file(f," r ")
。getChannel()。映射(文件通道。MapMode .只讀,
f.length() / 2,f . length()/2);
byte[] dst =新字節[BUFFER _ SIZE];//壹次讀取3M的內容。
long start = system . current time millis();
for(int offset = 0;offset & ltinput buffer . capacity();offset += BUFFER_SIZE) {
if(input buffer . capacity()-offset & gt;=緩沖區大小){
for(int I = 0;我& ltBUFFER _ SIZEi++)
dst[I]= input buffer . get(offset+I);
}否則{
for(int I = 0;我& ltinputBuffer.capacity() -偏移量;i++)
dst[I]= input buffer . get(offset+I);
}
int length =(input BUFFER . capacity()% BUFFER _ SIZE = = 0)?緩沖區大小
:input BUFFER . capacity()% BUFFER _ SIZE;
system . out . println(new String(dst,0,length));//新建
// String(dst,0,length)以便取出緩存中保存的字符串進行操作。
}
long end = system . current time millis();
System.out.println("讀取壹個文件的壹半內容需要"+(end-start)+" ms ");
}
公共靜態void main2(String[] args)引發異常{
int bufSize = 1024;
byte[] bs =新字節[bufSize];
byte buffer byte buf = byte buffer . allocate(1024);
file channel channel = new random access file(fff," r ")。get channel();
while (channel.read(byteBuf)!= -1) {
int size = byte buf . position();
byte buf . rewind();
byte buf . get(bs);//以文件為字符串,直接打印為例。
System.out.print(新字符串(bs,0,size));
byte buf . clear();
}
}
公共靜態void main(String[] args)引發異常{
buffered reader br = new buffered reader(新文件閱讀器(fff));
String line = null
while ((line = br.readLine())!= null) {
system . out . println(line);
}
}
}