字符流
由来:字节流操作中文数据不是特别的方便,所以就出现了转换流。
转换流的作用就是把字节流转换字符流来使用。
转换流其实是一个字符流
字符流 = 字节流 + 编码表
(1)定义:
面向字符的操作,以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,
在写的时候将字符转为二进制数据
)属性
1)编码表
1-就是由字符和对应的数值组成的一张表
2-常见的编码表
ASCII
ISO-8859-1
GB2312
GBK
GB18030
Unicode:所有文字都用两个字节表示,java语言使用的就是它
UTF-8:是Unicode的实现方式之一,1~4个字节
unicode一个中文字符占2个字节,而UTF-8一个中 文字符占3个字节
2)字符串中的编码问题
String(byte[] byte,String charsetName)--通过指定的字符集解码字符数组
byte[] getBytes(String charsetName)--使用指定的字符编码表把字符串编码为字节数组
编码
String -- byte[]
解码
byte[] -- String
编码解码的格式要一致
3)IO流中的编码问题
1-OutputStreamWriter
OutputStreamWriter(OutputStream os):默认编码输入数据,GBK
OutputStreamWriter(OutputStream os,String charsetName):指定编码输入数据。
把字节流转换为字符流
字符流=字节流+编码表
2-InputStreamReader
InputStreamReader(InputStream is):默认编码读取数据,GBK
InputStreamReader(InputStream is,String charsetName):指定编码读取数据
3-编码要一致
4)字符流
1-Reader
|--InputStreamReader
|--FileReader:没有自己的特有方法
|--BufferedReader
String readLine():一次读取一个字符串
int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组
int read(char[] chs,int off,int len):一次读一个字符数组的一部分
2-Writer
|--OutputStreamWriter
|--FileWriter
|--BufferedWriter
void write(int ch):一次写一个字符
void write(char[] cbuf)--写一个字符数组
void write(char[] chs,int index,int len):一次写一个字符数组的一部分
void write(String str)--写一个字符串
void write(String str,int off, int len)--写一个字符串的一部分
IO流小结