要回答这个问题,首先就得知道字符流和字节流间的关系:
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串
2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
3.字符流是将字节流读到的数据先去查了下指定的 charset(也就是我们经常说的编码表),去码表找对应的关系,转化成字符数据。
你可以这样简单地理解 字符流=字节流+码表信息
转换流,简单说就是用来2种流间互相转换用的
“ InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 ”
这句话的意思可以这么理解:InputStreamReader 可以将字节流转化成对应的字符流(通过你指定的码表,不指定则为默认)
也就是通过InputStreamReader处理后的字节流出来后就成了字符流了,如以下操作:InputStreamReader isr=new ( InputStreamReader(InputStream in) )
in是字节流,但是isr就是字符流了。
OutputStreamWriter,就不说了,和InputStreamReader刚好相反。
|