標籤:
Java讀取檔案 利用MappedByteBuffer進行緩衝,這樣可以保證邊讀取大檔案,邊進行處理
package sean;import java.io.ByteArrayInputStream;import java.io.File;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;import java.util.Scanner;public class Snippet {public void readResource() {long fileLength = 0;final int BUFFER_SIZE = 0x300000;// 3M的緩衝//for (String fileDirectory : this.readResourceDirectory())// 得到檔案存放路徑,我這裡使用了一個方法從XML檔案中讀出檔案的// 存放路徑,當然也可以用絕對路徑來代替這裡的fileDriectory//{File file = new File("D:\\MyData.txt");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[i] = inputBuffer.get(offset + i);} else {for (int i = 0; i < fileLength - offset; i++)dst[i] = inputBuffer.get(offset + i);}// 將得到的3M內容給Scanner,這裡的XXX是指Scanner解析的分隔字元Scanner scan = new Scanner(new ByteArrayInputStream(dst)).useDelimiter(" ");while (scan.hasNext()) {// 這裡為對讀取文本解析的方法System.out.print(scan.next() + " ");}scan.close();}} catch (Exception e) {e.printStackTrace();}//}}public static void main(String[] args){Snippet sp = new Snippet();sp.readResource();}}
Java讀取檔案 利用MappedByteBuffer進行緩衝