1. 程式人生 > >Java之IO(十)Reader和Writer

Java之IO(十)Reader和Writer

puts app 使用 [] 前言 left t對象 log pen

  轉載請註明源出處:http://www.cnblogs.com/lighten/p/7071733.html

1.前言

  之前的章節已經將Java8的io包中的字節流介紹完畢了。本章開始介紹Java的IO中另一個重要的體系,字符流。字節是給計算機看的,字符才是人能夠認識的,可想而知字符流的重要性。字符流體系的根源在於抽象父類Reader和Writer。一切都起源於這兩個類。

2.Reader

  Reader實現了Readable和Closeable接口,這兩個接口從JDK1.5開始出現。Reader的結構其實和InputStream很像,如下:

技術分享  稍有不同的地方就是:lock對象鎖和read(CharBuffer)這個Readable接口需要實現的方法,ready()對比於InputStream中的available()了。lock是一個Object對象,其作用是用於流中的同步操作,為了高效通常使用其它的對象,而不是流對象本身(this。同步鎖使用this對象效率會差?Get一個新的知識點了)。Reader與InputStream最大的不同就在於Reader需要子類實現的方法是read(char[], int, int),InputStream是read()。這也很好理解,因為Reader字符流更關註的是字符,可以是多個字節,InputStream關註的是字節,所以是需要實現read()方法。

技術分享

  通過read(char[], int, int)方法,讀取一個字符數組,存入所給的CharBuffer中。

技術分享

  read()也是借助了read(char[],int, int)方法。

技術分享

  maxSkipBufferSize默認是8192,所以一次最多跳過這麽多個字符。其它的放啊就是不支持重置,close方法要自己處理了。

3.Writer

  Writer的差異與OutputStream就大不相同了,結構如下:

技術分享

  其需要實現的方法就是write(char[],int,int),flush()和close()方法。append方法都來自於其實現的Appendable接口。默認的WRITE_BUFFER_SIZE是1024個。

技術分享

技術分享

  實現都比較簡單,看一下就能看明白的,這裏不做詳細描述。上面的結構也能看出其針對的就是字符流了。寫都是字符或字符串。append方法其實也是調用了這些方法。

Java之IO(十)Reader和Writer