首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】2023年10月 Java教学课程 064-转换流

【愚公系列】2023年10月 Java教学课程 064-转换流

作者头像
愚公搬代码
发布2025-05-28 15:10:39
发布2025-05-28 15:10:39
12500
代码可运行
举报
文章被收录于专栏:历史专栏历史专栏
运行总次数:0
代码可运行

🚀前言

乱码问题是指在使用计算机或其他电子设备进行文本显示或传输时,出现了原本应该显示的字符无法正确显示或者出现了乱码的情况。这种情况通常出现在字符编码格式不匹配的情况下,比如使用不同的字符集或编码方式发送和接收文本。

🚀一、转换流

🔎1.转换流

Java中的转换流(InputStreamReader和OutputStreamWriter)是一种字符流,它将字节流转换成字符流。转换流可以读取字节流并将其转换为字符流,也可以将字符流转换为字节流。它使用指定的字符集将字节流转换为字符流,并将字符流转换为字节流时将字符编码为指定的字符集。

在Java中,使用InputStreamReader读取字节流并将其转换为字符流,使用OutputStreamWriter将字符流转换为字节流。例如,当读取文件时,可以使用FileInputStream读取文件的字节流,然后使用InputStreamReader将其转换为字符流。在写入文件时,可以使用FileOutputStream写入字节流,然后使用OutputStreamWriter将其转换为字符流。这种字符流和字节流之间的转换可以使Java程序更加灵活和方便。

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) {
    try (
            // 不会乱码:代码编码:UTF-8   文件编码:UTF-8
            // Reader fr = new FileReader("io-app2/src/csb2.txt");

            // 会乱码:代码编码:UTF-8   文件编码:GBK
            Reader fr = new FileReader("D:\\resources\\data.txt");
            // a、把低级的字符输入流包装成高级的缓冲字符输入流。
            BufferedReader br = new BufferedReader(fr);
    ){

        String line;
        while ((line = br.readLine()) != null){
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

🔎2.字符输入转换流

在Java中,字符输入转换流是将字节流转换为字符流的一种方式,可以将不同类型的数据读取为字符流,并且可以指定字符集编码。以下是使用字符输入转换流的示例代码:

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;

public class CharInputConversionStream {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("input.txt"); // 创建字节输入流
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); // 创建字符输入转换流,指定字符集编码为UTF-8
            BufferedReader br = new BufferedReader(isr); // 创建缓冲读取器

            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line); // 输出每行字符串
            }

            br.close(); // 关闭读取器
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,首先创建了一个字节流FileInputStream来读取一个文件,然后创建一个字符输入转换流InputStreamReader,并且指定字符集编码为UTF-8。最后创建一个缓冲读取器BufferedReader来读取每行字符串并输出到控制台。最后关闭读取器以释放资源。

需要注意的是,在使用字符输入转换流时,需要先创建一个字节流,然后将字节流传递给字符输入转换流,再将字符输入转换流传递给缓冲读取器。同时,需要指定字符集编码以确保正确的字符解码。

🔎3.字符输出转换流

Java中的字符输出转换流是输出字符流中的一种特殊类型,可以将Unicode字符编码的数据转换成指定编码格式的字符输出流。常见的字符输出转换流有OutputStreamWriter和PrintWriter。

OutputStreamWriter将一个字节输出流转换为字符输出流,并以指定的字符编码格式写入字符数据。

PrintWriter是一个高级的字符输出流,它可以自动刷新,并且可以用来输出各种数据类型,包括字符、数字和布尔类型等。如果需要将有格式的输出写入到文件或者网络中,就可以使用PrintWriter。

以下是使用OutputStreamWriter和PrintWriter输出字符的示例代码:

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.*;

public class CharOutputConversionDemo {
    public static void main(String[] args) {
        String filePath = "example.txt";
        try {
            // 使用OutputStreamWriter输出字符
            FileOutputStream fos = new FileOutputStream(filePath);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            osw.write("This is a test string 中文测试");
            osw.close();

            // 使用PrintWriter输出字符
            FileWriter fw = new FileWriter(filePath, true);
            PrintWriter pw = new PrintWriter(fw);
            pw.println("This is another test string");
            pw.printf("PI is approximately %.3f%n", Math.PI);
            pw.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

这段代码会在当前目录下创建一个example.txt文件,并向其写入两行字符数据。

注意,在使用OutputStreamWriter和PrintWriter输出字符时,需要指定输出流的字符编码格式,否则可能会出现乱码问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、转换流
    • 🔎1.转换流
    • 🔎2.字符输入转换流
    • 🔎3.字符输出转换流
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档