最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 中的 BufferedWriter 介紹_動力節(jié)點Java學院整理

 更新時間:2017年05月17日 16:47:26   投稿:mrr  
BufferedWriter 是緩沖字符輸出流。它繼承于Writer。接下來通過本文給大家分享Java 中的 BufferedWriter知識,需要的朋友參考下吧

BufferedWriter 介紹

BufferedWriter 是緩沖字符輸出流。它繼承于Writer。

BufferedWriter 的作用是為其他字符輸出流添加一些緩沖功能。

BufferedWriter 函數(shù)列表 

// 構(gòu)造函數(shù)
BufferedWriter(Writer out) 
BufferedWriter(Writer out, int sz) 
void  close()               // 關閉此流,但要先刷新它。
void  flush()               // 刷新該流的緩沖。
void  newLine()              // 寫入一個行分隔符。
void  write(char[] cbuf, int off, int len) // 寫入字符數(shù)組的某一部分。
void  write(int c)             // 寫入單個字符。
void  write(String s, int off, int len)  // 寫入字符串的某一部分。 

BufferedWriter 源碼分析(基于jdk1.7.40) 

 package java.io;
  public class BufferedWriter extends Writer {
    // 輸出流對象
    private Writer out;
    // 保存“緩沖輸出流”數(shù)據(jù)的字符數(shù)組
    private char cb[];
   // nChars 是cb緩沖區(qū)中字符的總的個數(shù)
   // nextChar 是下一個要讀取的字符在cb緩沖區(qū)中的位置
   private int nChars, nextChar;
   // 默認字符緩沖區(qū)大小
   private static int defaultCharBufferSize = ;
   // 行分割符
   private String lineSeparator;
   // 構(gòu)造函數(shù),傳入“Writer對象”,默認緩沖區(qū)大小是k
   public BufferedWriter(Writer out) {
     this(out, defaultCharBufferSize);
   }
   // 構(gòu)造函數(shù),傳入“Writer對象”,指定緩沖區(qū)大小是sz
   public BufferedWriter(Writer out, int sz) {
     super(out);
    if (sz <= 0)
       throw new IllegalArgumentException("Buffer size <= ");
     this.out = out;
     cb = new char[sz];
     nChars = sz;
     nextChar = 0;
     lineSeparator = java.security.AccessController.doPrivileged(
       new sun.security.action.GetPropertyAction("line.separator"));
   }
   // 確保“BufferedWriter”是打開狀態(tài)
   private void ensureOpen() throws IOException {
     if (out == null)
       throw new IOException("Stream closed");
   }
   // 對緩沖區(qū)執(zhí)行flush()操作,將緩沖區(qū)的數(shù)據(jù)寫入到Writer中
   void flushBuffer() throws IOException {
     synchronized (lock) {
       ensureOpen();
      if (nextChar == 0)
         return;
       out.write(cb, 0, nextChar);
       nextChar = 0;
     }
   }
   // 將c寫入到緩沖區(qū)中。先將c轉(zhuǎn)換為char,然后將其寫入到緩沖區(qū)。
   public void write(int c) throws IOException {
     synchronized (lock) {
       ensureOpen();
       // 若緩沖區(qū)滿了,則清空緩沖,將緩沖數(shù)據(jù)寫入到輸出流中。
       if (nextChar >= nChars)
         flushBuffer();
       cb[nextChar++] = (char) c;
     }
   }
   // 返回a,b中較小的數(shù)
   private int min(int a, int b) {
     if (a < b) return a;
     return b;
   }
   // 將字符數(shù)組cbuf寫入到緩沖中,從cbuf的off位置開始寫入,寫入長度是len。
   public void write(char cbuf[], int off, int len) throws IOException {
     synchronized (lock) {
       ensureOpen();
       if ((off < 0) || (off > cbuf.length) || (len < 0) ||
         ((off + len) > cbuf.length) || ((off + len) < 0)) {
         throw new IndexOutOfBoundsException();
       } else if (len == 0) {
         return;
       }
       if (len >= nChars) {
         /* If the request length exceeds the size of the output buffer,
           flush the buffer and then write the data directly. In this
           way buffered streams will cascade harmlessly. */
         flushBuffer();
         out.write(cbuf, off, len);
         return;
       }
       int b = off, t = off + len;
       while (b < t) {
         int d = min(nChars - nextChar, t - b);
         System.arraycopy(cbuf, b, cb, nextChar, d);
         b += d;
         nextChar += d;
         if (nextChar >= nChars)
           flushBuffer();
       }
     }
   }
   // 將字符串s寫入到緩沖中,從s的off位置開始寫入,寫入長度是len。
   public void write(String s, int off, int len) throws IOException {
     synchronized (lock) {
       ensureOpen();
       int b = off, t = off + len;
       while (b < t) {
         int d = min(nChars - nextChar, t - b);
         s.getChars(b, b + d, cb, nextChar);
         b += d;
         nextChar += d;
         if (nextChar >= nChars)
           flushBuffer();
       }
     }
   }
   // 將換行符寫入到緩沖中
   public void newLine() throws IOException {
     write(lineSeparator);
   }
   // 清空緩沖區(qū)數(shù)據(jù)
   public void flush() throws IOException {
     synchronized (lock) {
       flushBuffer();
       out.flush();
     }
   }
   public void close() throws IOException {
     synchronized (lock) {
       if (out == null) {
         return;
       }
       try {
         flushBuffer();
       } finally {
         out.close();
         out = null;
         cb = null;
       }
     }
   }
 }

說明: BufferedWriter的源碼非常簡單,這里就BufferedWriter的思想進行簡單說明:BufferedWriter通過字符數(shù)組來緩沖數(shù)據(jù),當緩沖區(qū)滿或者用戶調(diào)用flush()函數(shù)時,它就會將緩沖區(qū)的數(shù)據(jù)寫入到輸出流中。 

示例代碼

關于BufferedWriter中API的詳細用法,參考示例代碼(BufferedWriterTest.java): 

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;
 /**
 * BufferedWriter 測試程序
 *
 * 
 */
 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測試函數(shù)
   */
   private static void testBufferedWriter() {
     // 創(chuàng)建“文件輸出流”對應的BufferedWriter
     // 它對應緩沖區(qū)的大小是16,即緩沖區(qū)的數(shù)據(jù)>=16時,會自動將緩沖區(qū)的內(nèi)容寫入到輸出流。
     try {
       File file = new File("bufferwriter.txt");
       BufferedWriter out =
          new BufferedWriter(
            new FileWriter(file));
      // 將ArrayLetters數(shù)組的前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);
   }
 }

運行結(jié)果:

生成文件“bufferwriter.txt”,文件的內(nèi)容是“abcdefghij”。

以上所述是小編給大家介紹的Java 中的 BufferedWriter知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼

    RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼

    本篇文章主要介紹了RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • SpringBoot靜態(tài)資源css,js,img配置方案

    SpringBoot靜態(tài)資源css,js,img配置方案

    這篇文章主要介紹了SpringBoot靜態(tài)資源css,js,img配置方案,下文給大家分享了三種解決方案,需要的朋友可以參考下
    2017-07-07
  • 詳解JAVA動態(tài)代理

    詳解JAVA動態(tài)代理

    這篇文章主要介紹了JAVA動態(tài)代理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Shell重啟SpringBoot項目腳本的示例代碼(含服務守護)

    Shell重啟SpringBoot項目腳本的示例代碼(含服務守護)

    本文介紹了如何使用?Bash?腳本來管理和守護運行服務,將展示一個示例腳本,該腳本可以停止、啟動和守護運行一個服務,并提供了相應的解釋和用法說明,文章通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 支持SpEL表達式的自定義日志注解@SysLog介紹

    支持SpEL表達式的自定義日志注解@SysLog介紹

    這篇文章主要介紹了支持SpEL表達式的自定義日志注解@SysLog,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JAVA函數(shù)的定義、使用方法實例分析

    JAVA函數(shù)的定義、使用方法實例分析

    這篇文章主要介紹了JAVA函數(shù)的定義、使用方法,結(jié)合實例形式分析了JAVA函數(shù)的基本概念、功能、原理、定義、使用方法與操作注意事項,需要的朋友可以參考下
    2020-04-04
  • idea右鍵沒有java class選項問題解決方案

    idea右鍵沒有java class選項問題解決方案

    這篇文章主要介紹了idea右鍵沒有java class選項問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 詳解JVM虛擬機的類加載機制

    詳解JVM虛擬機的類加載機制

    這篇文章主要介紹了詳解JVM虛擬機的類加載機制,虛擬機把描述類的數(shù)據(jù)從 Class 文件加載到內(nèi)存,并對數(shù)據(jù)進行校驗、轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機直接使用的 Java 類型,這就是虛擬機的類加載機制,需要的朋友可以參考下
    2023-08-08
  • Java詳細講解分析雙指針法的使用

    Java詳細講解分析雙指針法的使用

    嚴格的來說,雙指針只能說是是算法中的一種技巧。雙指針指的是在遍歷對象的過程中,不是普通的使用單個指針進行訪問,而是使用兩個相同方向(快慢指針)或者相反方向(對撞指針)的指針進行掃描,從而達到相應的目的
    2022-04-04
  • Java實現(xiàn)Treap樹的示例代碼

    Java實現(xiàn)Treap樹的示例代碼

    本文主要介紹了Java實現(xiàn)Treap樹的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

遂川县| 吉首市| 施甸县| 海口市| 大余县| 公主岭市| 华安县| 九江县| 潼关县| 永定县| 吐鲁番市| 荥经县| 昌吉市| 临安市| 迭部县| 昆山市| 象州县| 伊吾县| 永靖县| 略阳县| 平罗县| 淮安市| 平遥县| 方山县| 呼玛县| 宿迁市| 昌图县| 河津市| 达尔| 滦南县| 和政县| 酒泉市| 宽甸| 房产| 云林县| 漳州市| 迁西县| 张家口市| 霍山县| 台南县| 凭祥市|