0%

Java-36-转换流

转换流

InputStreamReader类

转换流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.*;

// 转换流
// InputStreamReader类
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);
}
}
}
1
2
3
4
5
6
7






进程已结束,退出代码0

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;

// 转换流
// OutputStreamWriter类
public class demo2 {
public static void main(String[] args) throws IOException {
// 默认编码为UTF-8
OutputStreamWriter outputStreamWriter1 = new OutputStreamWriter(new FileOutputStream("day10-code\\b1.txt"));

String str = "你好";
outputStreamWriter1.write(str);
outputStreamWriter1.close();

// 将编码方式修改为GBK
OutputStreamWriter outputStreamWriter2 = new OutputStreamWriter(new FileOutputStream("day10-code\\b2.txt"), "gbk");

outputStreamWriter2.write(str);
outputStreamWriter2.close();
}
}

上述代码运行完毕后,在当前工程下就会生成两个文件b1.txtb2.txt

我们在文件资源管理打开工程,可以看到这两个文件所占字节数是不一样的。

  • b1.txt:6字节。

    image-20230614214342814

  • b2.txt:4字节。

image-20230614214413072

出现这个现象的原因就是因为,两个文件采用的编码方式不一样,UTF-8编码方式中,每个中文占3个字节;GBK编码方式中,每个中文占2个字节。

转换流是字节与字符间的桥梁!

2_zhuanhuan

-------------本文结束感谢您的阅读-------------