1.为什么会存在字符流
由于字节流操作中文不是很方便,所以Java提供了字符流。
字符流 = 字节流 + 编码表
汉字在存储的时候,不管是GBK还是UTF-8,第一个字节都是负数
2.字符串中的编码解码问题:
1)编码
byte [] getBytes():使用平台默认字符集将String编码为一系列字节储存在字节数组中
byte [] getBytes(String charsetName):使用指定的字符集将String编码为一系列字节存储在数组中
2)解码:
String(byte [] b, String charsetName):将数组里的字节转化为字符串,第二个参数可选(即使用指定的字符集解码字节数组)
3)字符流的抽象基类:
Reader:字符输入流的抽象基类
Writer:字符输出流的抽象基类
4)字符流中与解码编码的两个类:InputStreamReader,OutputStreamWriter
As: OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("路径字符串"))
osw.write("中国")
osw.close()
5)字符流写数据的五种方法:
字符流写数据的5种方式_august197210的博客-CSDN博客
Tip:字符流写数据写完会在缓冲区,需要使用flush()方法即时显示
6)字符流读数据的两种方法:
Int read(),int read(byte [] b)
7)转换流的名字比较长,而我们常见的操作是按照本地默认编码实现的,所以为了简化书写,转换流提供了相应的子类
Reader->InputStreamReader->FileReader
Writer->OutputStreamReader->FileWriter
8)字符缓冲流:(类似字节缓冲流,提供了一个足够大的字节数组)
BufferReader(Reader r),BufferWriter(Writer w)
As:BufferReader br = new BufferReader(new FileReader("地址字符串"))
9)字符缓冲流的特有方法:
Void newLine():写一行行分隔符,行分隔符字符串由系统属性定义
Public String readLine():读一行文字,结果包含行的内容的字符串,不包括任何终止字符(\n, \r),如果流的结尾已经到达,则为null