黑马程序员_84_IO转换流

本文介绍了Java中的字符流与字节流转换的概念、应用及示例,通过实例展示了如何使用InputStreamReader和OutputStreamWriter进行字节与字符之间的转换,以及在实际编程中的应用技巧。

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

 ——- android培训java培训、期待与您交流! ———-

概述

转换流的由来:
字符流与字节流之间的桥梁
方便了字符流与字节流之间的操作

转换流的应用:
字节流中的数据都是字符时,转成字符流操作更高效。

转换流:
InputStreamReader:字节到字符的桥梁,解码。
OutputStreamWriter:字符到字节的桥梁,编码。

InputStreamReader是字节流通向字符流的桥梁。

示例

示例1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class TransStreamDemo{

       public static void main(String[] args) throws IOException {
             //字节流
            InputStream in = System.in;

             //将字节转成字符的桥梁,转换流
            InputStreamReader isr = new InputStreamReader(in);

             //对字符流进行高效装饰,缓冲区
            BufferedReader bufr = new BufferedReader(isr);

            String line = null;

             //读取到了字符串数据
             while((line = bufr.readLine()) != null){
                   if("over" .equals(line))
                         break;
                  System.out.println(line.toUpperCase());
            }
      }
}

运行结果图这里写图片描述
小结
使用字节流读取一个中文字符需要读取两次,因为一个中文字符由两个字节组成,而使用字符流只需读取一次。
System.out的类型是PrintStream,属于OutputStream类别。

OutputStreamReader是字符流通向字节流的桥梁。

示例2

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class TransStreamDemo{

       public static void main(String[] args) throws IOException {

            InputStream in = System.in;

            InputStreamReader isr = new InputStreamReader(in);

             //字符流
            BufferedReader bufr = new BufferedReader(isr);

             //字节流,字节数据
            OutputStream out = System.out;

             //数据到了osw,目的地out控制台
            OutputStreamWriter osw = new OutputStreamWriter(out);

            BufferedWriter bufw = new BufferedWriter(osw);

            String line = null;

             while((line = bufr.readLine()) != null){
                   if("over" .equals(line))
                         break;

                   //将字符数据用缓冲区对象将数据写入缓冲区,目的地是osw
                  bufw.write(line.toUpperCase());
                  bufw.newLine();
                   //osw.write(line.toUpperCase() + "\r\n");可以替代上面两行代码
                  bufw.flush();
            }
      }
}

运行结果图
这里写图片描述

示例2简化代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TransStreamDemo{

       public static void main(String[] args) throws IOException {

            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

            String line = null;

             while((line = bufr.readLine()) != null){
                   if("over" .equals(line))
                         break;

                  bufw.write(line.toUpperCase());
                  bufw.newLine();
                  bufw.flush();
            }
      }
}

运行结果图
这里写图片描述

练习

练习1

需求:将键盘录入的数据写入到一个文件中。
源码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class TransStreamDemo{

     public static void main(String[] args) throws IOException {

          BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

          BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));

          String line = null;

          while((line = bufr.readLine()) != null){
               if("over" .equals(line))
                    break;

               bufw.write(line.toUpperCase());
               bufw.newLine();
               bufw.flush();
          }
     }
}

运行结果图
这里写图片描述
这里写图片描述

练习2

需求:将一个文本文件内容显示在控制台上。
源码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TransStreamDemo{

       public static void main(String[] args) throws IOException {

            BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));

            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

            String line = null;

             while((line = bufr.readLine()) != null){
                   if("over" .equals(line))
                         break;

                  bufw.write(line.toUpperCase());
                  bufw.newLine();
                  bufw.flush();
            }
      }
}

运行结果图
这里写图片描述

练习3

需求:将一个文本文件中的内容复制到另一个文件中。

源码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TransStreamDemo{

       public static void main(String[] args) throws IOException {

            BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));

            BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));

            String line = null;

             while((line = bufr.readLine()) != null){
                   if("over" .equals(line))
                         break;

                  bufw.write(line.toUpperCase());
                  bufw.newLine();
                  bufw.flush();
            }
      }
}

运行结果图
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值