转换流
转换流java.io.InputStreamReader
,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
InputStreamReader(InputStream in)
: 创建一个使用默认字符集的字符流。
InputStreamReader(InputStream in, String charsetName)
: 创建一个指定字符集的字符流。
构造举例,代码如下:
1 2
| InputStreamReader isr = new InputStreamReader(new FileInputStream("in.txt")); InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt") , "GBK");
|
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| package com.tipdm.demo2;
import java.io.*;
public class demo1 { public static void main(String[] args) throws IOException { FileInputStream fileInputStream = new FileInputStream("day10-code\\a.txt"); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
int charData; while((charData=inputStreamReader.read()) != -1){ System.out.println((char) charData); } } }
|
OutputStreamWriter类
转换流java.io.OutputStreamWriter
,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。
OutputStreamWriter(OutputStream in)
: 创建一个使用默认字符集的字符流。
OutputStreamWriter(OutputStream in, String charsetName)
: 创建一个指定字符集的字符流。
构造举例,代码如下:
1 2
| OutputStreamWriter isr = new OutputStreamWriter(new FileOutputStream("out.txt")); OutputStreamWriter isr2 = new OutputStreamWriter(new FileOutputStream("out.txt") , "GBK");
|
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package com.tipdm.demo2;
import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter;
public class demo2 { public static void main(String[] args) throws IOException { OutputStreamWriter outputStreamWriter1 = new OutputStreamWriter(new FileOutputStream("day10-code\\b1.txt"));
String str = "你好"; outputStreamWriter1.write(str); outputStreamWriter1.close();
OutputStreamWriter outputStreamWriter2 = new OutputStreamWriter(new FileOutputStream("day10-code\\b2.txt"), "gbk");
outputStreamWriter2.write(str); outputStreamWriter2.close(); } }
|
上述代码运行完毕后,在当前工程下就会生成两个文件b1.txt
和b2.txt
。
我们在文件资源管理打开工程,可以看到这两个文件所占字节数是不一样的。
b1.txt
:6字节。
b2.txt
:4字节。
出现这个现象的原因就是因为,两个文件采用的编码方式不一样,UTF-8
编码方式中,每个中文占3个字节;GBK
编码方式中,每个中文占2个字节。
转换流是字节与字符间的桥梁!