大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 java字符流緩沖區(qū)的具體方法有哪些

java字符流緩沖區(qū)的具體方法有哪些

更新時(shí)間:2019-08-31 09:00:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2583次

  


今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)為大家介紹“java字符流緩沖區(qū)的具體方法”,希望對(duì)各位小伙伴有幫助,下面就隨小編一起看看java字符流緩沖區(qū)的具體方法有哪些?


  1、 為什么要緩沖區(qū)?


  程序頻繁地操作一個(gè)資源(如文件),則性能會(huì)很低,此時(shí)為了提升性能,就可以將一部分?jǐn)?shù)據(jù)暫時(shí)讀入到內(nèi)存的一塊區(qū)域中,以后直接從此區(qū)域中讀取數(shù)據(jù)即可,因?yàn)樽x內(nèi)存速度比較快,這樣提高性能。在IO中引入緩沖區(qū),主要是提高流的讀寫效率。


  2、緩沖技術(shù)的原理?


  總的來(lái)說(shuō),緩沖區(qū)就是內(nèi)存里的一塊區(qū)域,把數(shù)據(jù)先存內(nèi)存里,然后一次性寫入,類似數(shù)據(jù)庫(kù)的批量操作,這樣效率比較高。


  3、BufferedWriter類


  (1) 定義


  public class BufferedWriter extends Writer


  將文本寫入字符輸出流,緩沖各個(gè)字符,從而提供單個(gè)字符、數(shù)組和字符串的高效寫入。


  (2) 常用的方法


// 關(guān)閉此流,但要先刷新它,實(shí)際上調(diào)用了Writer類的close方法 

public void close() throws IOException 

// 刷新該流的緩沖 

public void flush() throws IOException 

// 寫入一個(gè)行分隔符。行分隔符字符串由系統(tǒng)屬性 line.separator 定義 

public void newLine() throws IOException 

// 寫入字符數(shù)組的某一部分 

public void write(char[] cbuf, int off, int len) throws IOException 

// 寫入單個(gè)字符 

public void write(int c) throws IOException 


4、BufferedReader類


(1)定義


public class BufferedReader extends Reader 


從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取。


(2)常用的方法


// 關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源 

public void close() throws IOException 

// 讀取一個(gè)文本行。通過(guò)下列字符之一即可認(rèn)為某行已終止:換行 ('\n')、回車 ('\r') 或回車后直接跟著換行 

public String readLine() throws IOException 

// 將字符讀入數(shù)組的某一部分 

public int read(char[] cbuf, int off, int len) throws IOException 

// 讀取單個(gè)字符 

public int read() throws IOException 


范例:通過(guò)緩沖區(qū)復(fù)制一個(gè)文本文件


File source = new File("Demo.txt"); 

if (!source.exists()) { 

  return; 

BufferedWriter bufferedWriter = null; 

BufferedReader bufferedReader = null; 

try { 

  bufferedReader = new BufferedReader(new FileReader(source)); 

  bufferedWriter = new BufferedWriter(new FileWriter("Demo_copy.txt")); 

  String line = null; 

  while ((line = bufferedReader.readLine()) != null) { 

    bufferedWriter.write(line); 

    bufferedWriter.newLine();  // 換行 

    bufferedWriter.flush();   //將緩沖區(qū)數(shù)據(jù)刷到指定文件中 

  } 

} catch (Exception e) { 

  throw new RuntimeException("文件復(fù)制失敗!"); 

} finally { 

  // 關(guān)閉 bufferedWriter 和 bufferedReader 


5、緩沖區(qū)原理圖解


1566984530258681.jpg


6、根據(jù)原理圖,自定義緩沖類


public class MyBufferedRead extends Reader{ <br>  /** 

   * 緩沖區(qū)在定義時(shí)被緩沖的流對(duì)象 

   */

  private Reader read; 

  

  private char[] buffer = new char[1024]; 

  // 用于記錄存儲(chǔ)到緩沖區(qū)中字符個(gè)數(shù)的變量 

  private int count = 0; 

  // 用于操作數(shù)據(jù)中元素的角標(biāo) 

  private int pos = 0; 

  

  public MyBufferedRead(Reader read) { 

    this.read = read; 

  } 

  

  /** 

   * 定義一個(gè)讀取方法,從緩沖區(qū)中讀取一個(gè)字符 

   */

  public int myRead() throws IOException { 

    // 讀取一批數(shù)據(jù)到緩沖數(shù)據(jù)buffer中 

    if (count == 0) { 

      count = read.read(); 

      pos = 0; 

    } 

  

    if (count < 0) 

      return -1; 

  

    char ch = buffer[pos]; 

    pos++; 

    count--; 

    return ch; 

  } 

  

  /** 

   * 定義一個(gè)讀取一行的方法 

   */

  public String myReadLine() throws IOException { 

    StringBuilder stringBuilder = new StringBuilder(); 

    int ch = 0; 

    while ((ch = read.read()) != -1) { 

      // 如果遇到此字符,則繼續(xù) 

      if (ch == '\r') { 

        continue; 

      } 

      // 如果遇到此字符,表示該行讀取結(jié)束 

      if (ch == '\n') { 

        return stringBuilder.toString(); 

      } 

      // 將該行的字符添加到容器 

      stringBuilder.append((char) ch); 

    } 

    // 如果讀取結(jié)束,容器中還有字符,則返回元素 

    if (stringBuilder.length() != 0) { 

      return stringBuilder.toString(); 

    } 

    return null; 

  

  } 

  

  /** 

   * 關(guān)閉緩沖區(qū) 

   */

  public void myClose() throws IOException { 

    read.close(); 

  } 

  

  @Override

  public int read(char[] cbuf, int off, int len) throws IOException { 

    return 0; 

  } 

  

  @Override

  public void close() throws IOException { 

  } 


測(cè)試自定義緩沖類



public class MyBufferedReadDemo { 

  /** 

   * BufferedReader 方式的read方法 

   */

  @Test

  public void bufferedDemo() throws IOException{ 

    FileReader fileReader = new FileReader("JAVA專業(yè)術(shù)語(yǔ)集.txt"); 

    BufferedReader bufferedReader = new BufferedReader(fileReader); 

    int ch = 0; 

    while ((ch = bufferedReader.read()) != -1) { 

      System.out.print((char) ch); 

    } 

    // 關(guān)閉 bufferedReader 

    bufferedReader.close(); 

  } 

    

  /** 

   * 自定義MyBufferedRead類的myRead方法 

   */

  @Test

  public void myBufferedDemo() throws IOException{ 

    FileReader fileReader = new FileReader("JAVA專業(yè)術(shù)語(yǔ)集.txt"); 

    MyBufferedRead myBufferedRead = new MyBufferedRead(fileReader); 

    int ch = 0; 

    while ((ch = myBufferedRead.myRead()) != -1) { 

      System.out.print((char) ch); 

    } 

    myBufferedRead.myClose(); 

  } 

    

  /** 

   * BufferedReader 方式的readLine方法 

   */

  @Test

  public void readLineDemo() throws IOException{ 

  FileReader fileReader = new FileReader("JAVA專業(yè)術(shù)語(yǔ)集.txt"); 

    BufferedReader bufferedReader = new BufferedReader(fileReader); 

    String line = null; 

    while ((line = bufferedReader.readLine()) != null) { 

      System.out.println(line); 

    } 

    bufferedReader.close();    

  } 

    

  /** 

   * 自定義MyBufferedRead類的myReadLine方法 

   */

  @Test

  public void myReadLineDemo() throws IOException{ 

    FileReader fileReader = new FileReader("JAVA專業(yè)術(shù)語(yǔ)集.txt"); 

    MyBufferedRead myBufferedRead = new MyBufferedRead(fileReader); 

    String line = null; 

    while ((line = myBufferedRead.myReadLine()) != null) { 

      System.out.println(line); 

    } 

    myBufferedRead.myClose();   

  } 

}


上面有一個(gè)范例------緩沖區(qū)復(fù)制一個(gè)文本文件,怎么讓復(fù)制后每行帶有行標(biāo)?


  要實(shí)現(xiàn)此功能,最方便的是使用LineNumberReader,下面我們看下這個(gè)類


  此類的定義:


  public class LineNumberReaderextends BufferedReader


  跟蹤行號(hào)的緩沖字符輸入流。此類定義了方法 setLineNumber(int) 和 getLineNumber(),它們可分別用于設(shè)置和獲取當(dāng)前行號(hào)。


  實(shí)現(xiàn)上面功能程序代碼如下:


FileReader fileReader = new FileReader("tempFile\\demo.java"); 

LineNumberReader lineNumberReader = new LineNumberReader(fileReader); 

String line = null; 

// 設(shè)置開始行號(hào) 

lineNumberReader.setLineNumber(10); 

while ((line = lineNumberReader.readLine()) != null) { 

  System.out.println(lineNumberReader.getLineNumber() + "\t" + line); 

lineNumberReader.close();


以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)介紹的“java字符流緩沖區(qū)的具體方法有哪些”的內(nèi)容,希望對(duì)大家有幫助,更多精彩內(nèi)容請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java學(xué)院官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。


提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲国产精品网 | 亚洲91| 精品久久洲久久久久护士 | 99热这里只有免费国产精品 | 香蕉视频黄在线观看 | 成人网视频在线观看免费 | 久草看片| 亚洲午夜视频 | 亚洲成网站www久久九 | 天天干天天拍天天射 | 999久久久免费精品国产牛牛 | 国产国产精品人在线观看 | 天天操夜 | 亚洲成a人片在线观看精品 亚洲成a人一区二区三区 | 亚洲国产精品综合久久网络 | 天天插夜夜操 | 国模私拍视频在线观看 | 国产欧美精品区一区二区三区 | 久久嫩模| 一级特黄特交牲大片 | 日本一级毛片毛片一级毛片 | 国产一区免费观看 | 国内国语一级毛片在线视频 | 在线欧美精品国产综合五月 | 天天爱添天天爱添天天爱添 | 特级黄一级播放 | 中文字幕在线高清 | 日本免费人做人一区在线观看 | 精品二区 | 国产欧美亚洲精品一区 | 天天艹| 丁香午夜| 欧美freesex呦交 | 性性影院在线观看 | 青草九九| 中文乱码字幕午夜无线观看 | 日韩 在线视频精品 | 日韩美a一级毛片 | 欧美日韩视频在线播放 | 欧美精品99久久久久久人 | 欧美日韩性大片 |