Java讀取檔案 利用MappedByteBuffer進行緩衝

來源:互聯網
上載者:User

標籤:

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進行緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.