java之IO流(转换流)

本文详细解析了Java中OutputStreamWriter和InputStreamReader类的使用方法,包括如何使用指定编码将字符转换为字节,以及如何从字节流中解码字符。同时对比了FileWriter和FileReader类的适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.OutputStreamWriter类

可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。

    public static void main(String[] args) throws IOException {
        //指定目的地
        FileOutputStream fos=new FileOutputStream("E:\\java0929\\UTF-8.txt",true);
        //创建转换流
        OutputStreamWriter osw=new OutputStreamWriter(fos, "utf-8");
        osw.write("你好,小猪佩奇");
        osw.flush();
        //释放资源(你自己new了谁,就关谁,先开的后关)

        osw.close();
        fos.close();
    }

在OutputStreamWriter流中维护自己的缓冲区,当调用OutputStreamWriter对象的write方法时,会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数存放到OutputStreamWriter缓冲区中。然后再调用刷新功能,或者关闭流,或者缓冲区存满后会把缓冲区中的字节数据使用字节流写到指定的文件中。

二.InputStreamReader类

它使用指定的字符编码表读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

    public static void main(String[] args) throws IOException {
        //获取数据源
        FileInputStream fis=new FileInputStream("E:\\java0929\\UTF-8.txt");
        //创建转换流
        InputStreamReader isr=new InputStreamReader(fis,"utf-8");
        //开始读取
        int len=0;
        while((len=isr.read())!=-1){
            System.out.println((char)len);
        }
        //释放资源
        isr.close();
        fis.close();
    }

注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象。

三.转换流和子类区别

FileWriter是OutputStreamWriter子类

FileReader是InputStreamReader子类

OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。

 

FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默认字符集。
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");//指定GBK字符集。
FileReader fr = new FileReader("a.txt");

三句代码的功能相同,第三句最为方便

 

注意:一旦要指定其他编码时,绝对不能用子类,必须使用字符转换流。什么时候用子类呢?

条件:①操作的是文件。②使用默认编码。

总结:

字节→字符 : 看不懂的→看的懂的。  需要读,输入流(InputStreamReader)

字符→字节 : 看的懂的→看不懂的。  需要写,输出流(OutputStreamWriter)

转载于:https://www.cnblogs.com/akiyama/p/10222947.html

### Java IO转换流的使用方法 在Java中,`InputStreamReader`和`OutputStreamWriter`是用于实现字节到字符之间转换的主要工具。以下是关于如何使用这两种转换流的具体说明以及示例代码。 #### 转换流简介 - `InputStreamReader` 是一种桥接器,它将字节输入(如文件或网络连接)转换为字符输入,并支持指定字符编码[^3]。 - `OutputStreamWriter` 则相反,它是另一种桥接器,负责将字符输出转换成字节输出,同样允许设置特定的字符编码。 #### 使用场景 当需要处理涉及不同字符集的数据时,比如读取UTF-8编码的文本文件或将中文字符串保存至ISO-8859-1格式的文件中,就可以利用这些转换流完成任务。 #### 示例代码:写入带编码的字符数据 下面是一个简单的例子,演示了如何使用`OutputStreamWriter`向文件写出带有指定编码的内容: ```java import java.io.FileOutputStream; import java.io.OutputStreamWriter; public class OutputStreamWriterExample { public static void main(String[] args) throws Exception{ String content = "你好, 这是一些测试文字."; try (FileOutputStream fos = new FileOutputStream("output.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8")) { // 设置编码为 UTF-8 osw.write(content); System.out.println("成功写入文件."); } } } ``` 此程序创建了一个名为`output.txt`的新文件,并以UTF-8编码形式存储了一条消息。 #### 示例代码:读取带编码的字符数据 接着来看另一个实例——通过`InputStreamReader`从上述生成的文件里提取信息并打印出来: ```java import java.io.FileInputStream; import java.io.InputStreamReader; public class InputStreamReaderExample { public static void main(String[] args)throws Exception{ StringBuilder sb=new StringBuilder(); try(FileInputStream fis= new FileInputStream("output.txt"); InputStreamReader isr= new InputStreamReader(fis,"UTF-8")){ int data; while((data=isr.read())!=-1){ sb.append((char)data); } } System.out.println(sb.toString()); } } ``` 这段脚本会打开之前建立好的文档(`output.txt`),按照设定的UTF-8编码解读其内部资料后再显示于屏幕上。 #### 总结 借助`InputStreamReader`与`OutputStreamWriter`这两项功能强大的组件,开发者能够轻松应对各种复杂的跨平台或者跨国界别的文本传输需求,在保持原有语义不变的前提下调整适合目标环境的最佳表现形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值