java有個(gè)MappedByteBuffer類(lèi),他的作用可以把一個(gè)文件映射到內(nèi)存中,然后就能像訪(fǎng)問(wèn)數(shù)組一樣去讀取這個(gè)文件。這樣不用多線(xiàn)程也可以,你試試 public void readResource() { long fileLength = 0; final int BUFFER_SIZE = 0x300000;// 3M的緩沖 for(String fileDirectory:this.readResourceDirectory())//得到文件存放路徑,我這里使用了一個(gè)方法從XML文件中讀出文件的 //存放路徑,當(dāng)然也可以用絕對(duì)路徑來(lái)代替這里的fileDriectory { File file = new File(fileDirectory); fileLength = file.length(); try { MappedByteBuffer inputBuffer = new RandomAccessFile(file,"r").getChannel().map(FileChannel.MapMode.READ_ONLY, 0, fileLength);//讀取大文件 byte[] dst = new byte[BUFFER_SIZE];//每次讀出3M的內(nèi)容 for(int offset=0; offset < fileLength; offset+= BUFFER_SIZE) { if(fileLength - offset >= BUFFER_SIZE) { for(int i = 0;i < BUFFER_SIZE;i++) dst = inputBuffer.get(offset + i); } else { for(int i = 0;i < fileLength - offset;i++) dst = inputBuffer.get(offset + i); } //將得到的3M內(nèi)容給Scanner,這里的XXX是指Scanner解析的分隔符 Scanner scan = new Scanner(new ByteArrayInputStream(dst)).useDelimiter("XXX"); while(scan.hasNext()) { //這里為對(duì)讀取文本解析的方法 } scan.close(); } } catch (Exception e) { e.printStackTrace(); } } } |
|
來(lái)自: 悟靜 > 《.net和asp.net》