字符流 reader and writer 转换流 Input/OutputStreamReader 缓冲字符流PW

Reader和Writer是所有字符输入、输出流的超类,规定了字符流都应当具备的读写字符方法。

Reader的常用方法:

-int read() 读取一个字符,返回的int值“低16”位有效。

-int read(char[] chs) 从该流中读取一个字符数组的length个字符并存入该数组,返回值为实际读取到的字符量。

Writer的常用方法:

-void write(int c) 写出一个字符,写出给定值“低16”位表示的字符。

-void write(char[] chs) 将给定字符数组中所有字符写出。

-void write(String str) 将给定的字符串写出。

-void write(char[] chs,int offset,int len) 将给定的字符数组中从offset处开始连续的len个字符写出。

java按照流读写数据的单位划分为:字节流、字符流

字符流的读写单位是字符,但是实际底层还是以字节为单位读写。字符流会负责将字符与字节之间进行转换。

由于字符流以字符为单位读写,所有它们只适合读写文本数据!

字符流转换原理

InputStreamReader 字符输入流

-使用该流可以设置字符集,并按照指定的字符集从流中按照该编码将字节数据转换为字符并读取。

OutputStreamReader 字符输出流

-使用该流可以设置字符集,并按照指定的字符集将字符转换为对应字节后通过该流写出。

它们之所有叫转换流,是因为java中其他的字符流都只能接在其他字符流上,不能直接处理字节流,而转换流是可以处理字节流的,它们本身又是字符流,可以被其他字符流处理,所有它们起到了“转换器”的作用,从而实现了其他字符流最终可以连接到字节流上的目的。


缓冲字符流    特点是可以按行读写字符串

PrintWriter是常用的缓冲字符输出流,内部一定连接BufferedWriter作为缓冲功能。而PW本身还提供了自动行刷新功能。

PW提供了直接写文件的相关构造方法

PrintWriter(String path)

PrintWriter(File file)

字符流 reader and writer 转换流 Input/OutputStreamReader 缓冲字符流PW

从图中可以看出,PrintWriter是一个高级流,虽然可以直接对文件进行操作,但是其内部的构造是调用了其他的字符流等。

如果是直接操作文件,那么还支持重载的构造方法:

PrintWriter(String path,String csn)

PrintWriter(File file,String csn)  第二个参数为字符集(charset name)

PrintWriter在使用pw.println()时,如果在参数里加上true,即可实现即时行刷新。