编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

Java转换流

前面提到IO流可分为字节流和字符流,有时字节流和字符流之间也需要进行转换。在JDK中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter。

转换流也是一种包装流,其中OutputStreamWriter是Writer的子类,它可以将一个字节输出流包装成字符输出流,方便直接写入字符,而InputStreamReader是Reader的子类,它可以将一个字节输入流包装成字符输入流,方便直接读取字符。通过转换流进行数据读写的过程如图所示。

Java通过转换流进行数据读写的过程

接下来通过一个案例来学习如何将字节流转为字符流,为了提高读写效率,可以通过BufferedReader和BufferedWriter对转换流进行包装,具体代码如例所示。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IOTest {
    public static void main(String[] args) {
        try {
            FileInputStream in = new FileInputStream("D:/example.txt"); // 创建字节输入流
            InputStreamReader isr = new InputStreamReader(in);
            // 将字节流输入转换成字符输入流
            BufferedReader br = new BufferedReader(isr); // 对字符流对象进行包装
            FileOutputStream out = new FileOutputStream("D:/example.txt");
            // 将字节输出流转换成字符输出流
            OutputStreamWriter osw = new OutputStreamWriter(out);
            BufferedWriter bw = new BufferedWriter(osw); // 对字符输出流对象进行包装
            String line;
            while ((line = br.readLine()) != null) { // 判断是否读到文件末尾
                bw.write(line); // 输出读取到的文件
            }
            br.close();
            bw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

例实现了字节流和字符流之间的转换,将字节流转换为字符流,从而实现直接对字符的读写。需要注意的是,在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是一张图片,此时转换为字符流就会造成数据丢失。

未经允许不得转载: 技术文章 » Java编程 » Java转换流