[十七]JavaIO之CharArrayReader 和 CharArrayWriter


功能簡介

CharArrayReader  和 CharArrayWriter, 字符數組做爲數據源的字符讀寫 

CharArrayReader 
CharArrayWriter 
只須要記住他們的根本, CharArray 是數據源的形式
讀 CharArrayReader 須要接受一個字符數組做爲參數    就是從CharArray 中讀,因此須要一個字符數組
寫 CharArrayWriter  就是寫入到一個CharArray 中去,因此 它內部維護了一個字符數組
顯然, 字符數組都是內存中的數據

他們的邏輯相似ByteArrayInputStream ByteArrayOutputStream,只不過一個是字節,一個是字符而已
看下字段對照,相比就能對於實現過程瞭解一二
image_5b99f1e9_3747
image_5b99f1e9_8d3

CharArrayReader

要始終記着Reader的常規約定方法
read 讀取一個字符或者讀取字符到數組
mark
reset
markSupported
標記點相關
ready 相似available true 則保證不會阻塞,false則不保證必定阻塞
close 關閉流


構造方法

構造方法的本質就是  CharArrayReader的原理
從一個字符數組中讀取數據,這個字符數組經過構造方法傳入
注意:
字節數組不是複製而來的,引用直接指向
image_5b99f1e9_5448

使用char buf[] 做爲數據源 image_5b99f1e9_6d0f
使用char buf[]中, off偏移量開始,  length長度個字符
做爲數據源
image_5b99f1ea_3ef2

read

提供了兩個版本的read
讀一個字符
或者讀取字符 到指定的字符數組中的指定位置

image_5b99f1ea_b8f


標記功能

CharArray做爲數據源,自己就是內存中的數據
因此只須要標誌點,能夠隨意切換
天然支持標記功能
image_5b99f1ea_5a1a

close

close方法沒有太多實際的事情要作
只是緩衝區置空

image_5b99f1ea_1fc6


CharArrayWriter


writer的常規約定
write 將指定的的字符 字符序列 String ,寫入
append 追加指定的內容
flush 刷新
close 關閉

構造方法


CharArraywriter 內部維護了一個字符數組
image_5b99f1ea_f8a
構造方法主要就是對他進行初始化
默認大小是32
image_5b99f1ea_3fd5
緩衝區會隨向流中寫入數據而自動增加
在調用write方法過程當中
一旦大小超過,將會經過Arrays.copyOf  進行自動增加
增加是建立另一個數組,原始數據所有拷貝過去
char buf[]
是實際存儲數據的內部數組
count便是大小,也是下一個將要寫入數據的下標索引

因此想要知道大小,直接返回count
想要重置緩衝區,直接count清零,下次從頭開始寫入便可
image_5b99f1ea_2a5a

write方法

提供了三個版本的write 數組

將指定內容寫入輸出流緩衝區    app


public void write(int c) 將一個字符寫入內部緩衝區
public void write(char c[], int off, int len) 將指定的len個字符寫入內部緩衝區
public void write(String str, int off, int len) 將字符串的某一部分寫入內部緩衝區

writeTo


將緩衝區內的內容寫入到另外的字符流
過程很簡單,直接調用參數out的write方法
image_5b99f1ea_18e9

flush 和close

flush 和close在字符輸出流中並無什麼好作的
image_5b99f1ea_7f68


總結

CharArrayReader  和 CharArrayWriter, 字符數組做爲數據源的字符讀寫
邏輯是相似ByteArrayInputStream ByteArrayOutputStream 的

只須要記住CharArrayReader 接受一個CharArray 從這裏面讀,,read操縱的都是這個字符數組
CharArrayWriter內部有一個CharArray  數據是寫入到他們裏面的便可,write操縱的是內部的字符數組
相關文章
相關標籤/搜索