Java--转换流-InputStreamReader 和 OutputStreamWriter

基本介绍

在Java 中,InputStreamReader 和 **OutputStreamWriter **是两个重要的转换流类,分别用于将字节流转换为字符流和将字符流转换为字节流。以下是它们的核心功能:

1.InputStreamReader:Reader 的子类,可以将 InputStream(字节流)包装成 Reader(字符流)

2.OutputStreamWriter:Writer 的子类,实现将 OutputStream(字节流)包装成 Writer(字符流)

3.当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流

4.可以在使用时指定编码格式(比如 utf-8,gbk,gb2312,ISO8859-1等)

先来看一个例子

先看一个文件乱码问题,引出学习转换流的必要性

D盘有一个 a.txt 文件用ANSI编码

执行以下java代码会报错,编码格式不同

java 复制代码
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CodeQuestion {
    public static void main(String[] args) throws IOException {
        // 读取 D:\\a.txt 文件到程序
        // 思路
        // 1. 创建字符输入流 BufferedReader [处理流]
        // 2. 使用 BufferedReader 对象读取 a.txt
        // 3. 默认情况下,读取文件是按照 utf-8 编码
        String filePath = "D:\\a.txt";
        BufferedReader br = new BufferedReader(new FileReader(filePath));

        String s = br.readLine();
        System.out.println("读取到的内容: " + s);
        br.close();
    }
}

运行结果

解决方案如下

java 复制代码
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 将 FileInputStream 字节流 转成 InputStreamReader 字符流,指定编码 gbk/utf-8
 */
public class InputStreamReader_ {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\a.txt";
        InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath),"gbk");
        // 把 InputStreamReader 传入 BufferedReader
        BufferedReader br = new BufferedReader(isr);

        /**
         * 可以把以上两个语句合并
         * BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"gbk"));
         */
        
        // 读取
        String s = br.readLine();
        System.out.println("读取的内容: " + s);
        // 关闭外层流
        br.close();
    }
}

应用案例

编程将字节流 FileOutputStream 包装成(转换成)字符流 OutputStreamWriter,对文件进行写入(按照 gbk 格式,可以指定其他,比如 utf-8)

java 复制代码
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class OutputStreamWriter_ {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\hsp.txt";
        String charSet = "gbk";
        OutputStreamWriter obk = new OutputStreamWriter(new FileOutputStream(filePath), charSet);
        obk.write("我爱你,中国");
        obk.close();
        System.out.println("按照 " + charSet + " 保存文件成功");
    }
}
相关推荐
Joy T4 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383007 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·7 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真7 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes7 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停8 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金10 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟10 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
paopaokaka_luck10 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
阿里嘎多学长11 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管