Java-IO-转换流
转换流
字符编码与字符集
- 字符编码:
计算机只能识别二进制,
电脑上的任何软件都是以二进制的1和0存储的,将字符存储到计算机中,称为编码,
将二进制解析显示出来称为解码。
字符编码就是两者之间对应的转换规则
- 字符集
是一个系统所有字符的集合,包含各国文字等等
常见的字符集有:
1 | ASCII编码-->ASCII字符集 |
编码引出的问题
在IDEA中,使用UTF-8,日常使用没有问题,FileReader默认也是读取UTF-8
但是windows中有GBK编码,这样使用FileReader读取GBK的文件,就会产生乱码
转换流
InputStreamReader
字节流通向字符流的桥梁:
它使用指定的charset读取字节并将其解码为字符。
它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集
构造方法
1 | InputStreamReader(InputStream in) |
常用方法
1 | public String getEncoding() |
步骤:
- 创建一个
InputStreamReader
对象,构造方法中传递字节输入流和指定的编码表名称 - 使用
InputStreamReader
对象中的方法read读取文件 - 释放资源
示例代码
1 | InputStreamReader osr = new InputStreamReader(new FileInputStream("D:\\a.txt"),"UTF-8"); |
OutputStreamReader
字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。
它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
构造方法
1 | OutputStreamWriter(OutputStream out) |
步骤:
- 创建
OutputStreamWriter
对象,构造方法中传递字节输出流和指定的编码表名称 - 使用
OutputStreamWrirer
对象中的write
方法,把字符转换为字节存储缓冲区中 - 使用
OutputStreamWriter
的方法flush
,把内存缓冲区中的字节刷新到文件中 - 释放资源
示例代码
1 | OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\a.txt"),"UTF-8"); |