Java中BufferedReader與BufferedWriter類的使用樣本_java

來源:互聯網
上載者:User

BufferedReader
BufferedReader 是緩衝字元輸入資料流。它繼承於Reader。
BufferedReader 的作用是為其他字元輸入資料流添加一些緩衝功能。
建立BufferReader時,我們會通過它的建構函式指定某個Reader為參數。BufferReader會將該Reader中的資料分批讀取,每次讀取一部分到緩衝中;操作完緩衝中的這部分資料之後,再從Reader中讀取下一部分的資料。
為什麼需要緩衝呢?原因很簡單,效率問題!緩衝中的資料實際上是儲存在記憶體中,而未經處理資料可能是儲存在硬碟或NandFlash中;而我們知道,從記憶體中讀取資料的速度比從硬碟讀取資料的速度至少快10倍以上。
那幹嘛不乾脆一次性將全部資料都讀取到緩衝中呢?第一,讀取全部的資料所需要的時間可能會很長。第二,記憶體價格很貴,容量不想硬碟那麼大。

樣本:

import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.File;import java.io.InputStream;import java.io.FileReader;import java.io.IOException;import java.io.FileNotFoundException;import java.lang.SecurityException;public class BufferedReaderTest {  private static final int LEN = 5;  public static void main(String[] args) {    testBufferedReader() ;  }  /**   * BufferedReader的API測試函數   */  private static void testBufferedReader() {    // 建立BufferedReader字元流,內容是ArrayLetters數組    try {      File file = new File("bufferedreader.txt");      BufferedReader in =         new BufferedReader(           new FileReader(file));      // 從字元流中讀取5個字元。“abcde”      for (int i=0; i<LEN; i++) {        // 若能繼續讀取下一個字元,則讀取下一個字元        if (in.ready()) {          // 讀取“字元流的下一個字元”          int tmp = in.read();          System.out.printf("%d : %c\n", i, tmp);        }      }      // 若“該字元流”不支援標記功能,則直接退出      if (!in.markSupported()) {        System.out.println("make not supported!");        return ;      }      // 標記“當前索引位置”,即標記第6個位置的元素--“f”      // 1024對應marklimit      in.mark(1024);      // 跳過22個字元。      in.skip(22);      // 讀取5個字元      char[] buf = new char[LEN];      in.read(buf, 0, LEN);      System.out.printf("buf=%s\n", String.valueOf(buf));      // 讀取該行剩餘的資料      System.out.printf("readLine=%s\n", in.readLine());      // 重設“輸入資料流的索引”為mark()所標記的位置,即重設到“f”處。      in.reset();      // 從“重設後的字元流”中讀取5個字元到buf中。即讀取“fghij”      in.read(buf, 0, LEN);      System.out.printf("buf=%s\n", String.valueOf(buf));      in.close();    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (SecurityException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    }  }}

程式中讀取的bufferedreader.txt的內容如下:

abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

運行結果:

0 : a1 : b2 : c3 : d4 : ebuf=01234readLine=56789buf=fghij

BufferedWriter
BufferedWriter 是緩衝字元輸出資料流。它繼承於Writer。
BufferedWriter 的作用是為其他字元輸出資料流添加一些緩衝功能。
BufferedWriter通過字元數組來緩衝資料,當緩衝區滿或者使用者調用flush()函數時,它就會將緩衝區的資料寫入到輸出資料流中。
樣本:

import java.io.BufferedWriter;import java.io.File;import java.io.OutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.FileNotFoundException;import java.lang.SecurityException;import java.util.Scanner;public class BufferedWriterTest {  private static final int LEN = 5;  // 對應英文字母“abcdefghijklmnopqrstuvwxyz”  //private static final char[] ArrayLetters = "abcdefghijklmnopqrstuvwxyz";  private static final char[] ArrayLetters = new char[] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};  public static void main(String[] args) {    testBufferedWriter() ;  }  /**   * BufferedWriter的API測試函數   */  private static void testBufferedWriter() {    // 建立“檔案輸出資料流”對應的BufferedWriter    // 它對應緩衝區的大小是16,即緩衝區的資料>=16時,會自動將緩衝區的內容寫入到輸出資料流。    try {      File file = new File("bufferwriter.txt");      BufferedWriter out =         new BufferedWriter(           new FileWriter(file));      // 將ArrayLetters數組的前10個字元寫入到輸出資料流中      out.write(ArrayLetters, 0, 10);      // 將“分行符號\n”寫入到輸出資料流中      out.write('\n');      out.flush();      //readUserInput() ;      out.close();    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (SecurityException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    }  }  /**   * 讀取使用者輸入   */  private static void readUserInput() {    System.out.println("please input a text:");    Scanner reader=new Scanner(System.in);    // 等待一個輸入    String str = reader.next();    System.out.printf("the input is : %s\n", str);  }}

運行結果: 組建檔案“bufferwriter.txt”,檔案的內容是“abcdefghij”。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.