java有个MappedByteBuffer类,他的作用可以把一个文件映射到内存中,然后就能像访问数组一样去读取这个文件。这样不用多线程也可以,你试试 public void readResource() { long fileLength = 0; final int BUFFER_SIZE = 0x300000;// 3M的缓冲 for(String fileDirectory:this.readResourceDirectory())//得到文件存放路径,我这里使用了一个方法从XML文件中读出文件的 //存放路径,当然也可以用绝对路径来代替这里的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的内容 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内容给Scanner,这里的XXX是指Scanner解析的分隔符 Scanner scan = new Scanner(new ByteArrayInputStream(dst)).useDelimiter("XXX"); while(scan.hasNext()) { //这里为对读取文本解析的方法 } scan.close(); } } catch (Exception e) { e.printStackTrace(); } } } |
|
来自: 悟静 > 《.net和asp.net》