为了计算机能对不同文字进行存储,将会使用字符集表对文字进行编码。当前简体中文windows系统默认使用GBK字符集,用的utf-8编码规则。
编解码方法
编码使用的是字符串类的成员方法,解码是构造方法
我有一个文本文档,里面写了英文和中文。
我尝试用字节流去读取然后解析他
FileInputStream fis=new FileInputStream("D:\\aaa\\ddd.txt");
byte[]bytes=new byte[5];
int len;
while ((len=fis.read(bytes))!=-1) {
String str=new String(bytes);
System.out.println(str);
得到的却含有乱码,这是因为一次只能读取一个数组大小的数据,因此无法将整个数据完整读取到
因此,字符流便起作用了
字符输入流
字符流本质就是字节流加上了指定的编码规则
输入流:一次读多个字节,遇到中文时,一次读多个字节
输出流:底层会把数据按照指定编码方式进行编码,变成字节再写到文件中
因为字符流是按照指定规定进行读取写入,因此不能进行操作.jpg;.mp3;.mp4;.avi;.doc;.ppt等二进制文件,这些只能通过字节流来处理。所以对于纯文本的文件,强烈推荐使用字符输入输出流。
FileReader S
创建对象
读取的文件不存在直接报错
读取数据
1.按字节进行读取,遇到中文一次读取多个字节,读取后解码,返回一个整数
读到文件末尾了返回-1,有参的字符数组把读取,解码,强转合并了,把强转之后的字符放到数组中
2.读取后,会解码并转成十进制
关流:close
FIleWriter
构造方法:
成员方法:
关流:close方法
注意:如果不调用close方法关闭资源,数据只是保存到了缓冲区中,字符流在操作时首先会去将文件的内容读取到大小为8192缓冲区中,接着从缓冲区中读取内容,这样读取速度会快很多