首页 > 编程笔记

Java转换流(InputStreamReader和OutputStreamWriter)的用法

前面已经介绍过字节流和字符流,两者的区别在于每次处理数据的单位不同,字节流是基础管道,字符流是在字节流的基础上转换来的。

Java 提供了完成转换功能的类,按照输入和输出两个方向分为输入转换流(InputStreamReader)和输出转换流(OutputStreamWriter),我们来看看字符流的类定义,FileReader 的定义是:
public class FileReader extends InputStreamReader{}
可以看到,FileReader 继承自 InputStreamReader,即输入转换流。通过这个类将字节流转为字符流,字节是基本单位,所以是基础管道。

同理,FileWriter 继承自 OutputStreamWriter:
public class FileWriter extends OutputStreamWriter{}
InputStreamReader 和 OutputStreamWriter 分别是 Reader 和 Writer 的子类,定义为:
public class InputStreamReader extends Reader{}
public class OutputStreamWriter extends Writer{}
处理流将字节流转换为字符流的过程如下图所示:


InputStreamReader 的使用可以参考下方的程序:
public class Test {
   public static void main(String[] args) {
      try {
         InputStream inputStream = new FileInputStream("/Users/southwind/Desktop/ test.txt");
         InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
         Reader reader = inputStreamReader;
         char[] chars = new char[1024];
         int length = reader.read(chars);
         reader.close();
         String result = new String(chars,0,length);
         System.out.println(result);
      } catch (FileNotFoundException e) {
      }
   }
}
通过上述程序来读取 test.txt 的内容,test.txt中的内容是 hello world,程序的运行结果为:

hello world


OutputStreamWriter 的使用可以参考下方的程序:
public class Test {
   public static void main(String[] args) {
      String str = "你好 世界";
      try {
         OutputStream outputStream = new FileOutputStream("/Users/southwind/ Desktop/test2.txt");
         OutputStreamWriter outputStreamSriter = new OutputStreamWriter(outputStream);
         Writer writer = outputStreamSriter;
         writer.write(str);
         writer.flush();
         writer.close();
      } catch (FileNotFoundException e) {
      }
   }
}
上述程序会将“你好 世界”写入到桌面的 test2.txt 中,打开test2.txt 会看到“你好 世界”。

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。