学科分类
目录

转换流

前面提到IO流可分为字节流和字符流,有时字节流和字符流之间也需要进行转换。在JDK中,提供了两个类用于实现将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter。InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,方便直接读取字符。OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符。

通过转换流进行数据读写的过程如图1所示。

图1 字节流字符流转换过程

接下来通过一个案例来学习如何将字节流转为字符流,为了提高读写效率,可以通过BufferedReader和BufferedWriter来实现转换工作,具体代码如文件1所示。

文件1 Example11.java

 1    import java.io.*;
 2    public class Example11 {
 3        public static void main(String[] args) throws Exception {
 4             // 1、创建字节输入流对象,获取源文件
 5            FileInputStream in = new FileInputStream("reader.txt");
 6            // 将字节输入流对象转换成字符输入流对象
 7            InputStreamReader isr = new InputStreamReader(in);
 8            // 创建字符输入缓冲流对象
 9            BufferedReader br = new BufferedReader(isr); 
 10            // 2、创建字节输出流对象,指定目标文件
 11            FileOutputStream out = new FileOutputStream("writer.txt");
 12            // 将字节输出流对象转换成字符输出流对象
 13            OutputStreamWriter osw = new OutputStreamWriter(out);
 14            // 创建字符输出缓冲流对象
 15            BufferedWriter bw = new BufferedWriter(osw); 
 16            // 定义一个字符串变量
 17            String line = null;
 18            // 通过循环判断是否读到文件末尾
 19            while ((line = br.readLine()) != null) {
 20                // 输出读取到的文件
 21                bw.write(line); 
 22                bw.newLine();
 23            }
 24            // 关闭流
 25            br.close();
 26            bw.close();
 27        }
 28    }

程序运行结束后,同样会将源文件“reader.txt”中的内容拷贝到目标文件“writer.txt”中,结果如图2所示。

图2 拷贝后文件内容

上述程序实现了将字节流转换为字符流并实现文本文件拷贝的功能。

需要注意的是,在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是字节码内容的文件(如图片、视频等),此时转换为字符流就会造成数据丢失。

点击此处
隐藏目录