首页 > 编程笔记 > Java笔记 阅读:4

Java OutputStreamWriter和InputStreamReader的用法(附带实例)

Java 的整个 I/O 包分为字节流和字符流。除了这两类流之外,还提供两个转换流,这两个转换流实现将字节流变为字符流:

Java InputStreamReader

InputStreamReader 是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接收平台默认的字符集。每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了提高效率,可以考虑在 BufferedReader 内包装 InputStreamReader:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
InputStreamReader 的构造方法如下:
【实例】把“test.txt”文件的内容以字节输入流输入,通过输入转换流把字节流转换成字符流,然后把字符流中的字符送入字符数组中,并在控制台显示出来。
import java.io.*;

public class InputStreamR {
    public static void main(String[] args) throws Exception {
        File f = new File("d:" + File.separator + "test.txt");
        // 创建一个字节输入流对象,把它的内容转换到字符输入流中
        Reader reader = new InputStreamReader(new FileInputStream(f));
        char c[] = new char[1024];
        // 读取输入流中的字符到字符数组中,返回读取的字符长度
        int len = reader.read(c);
        reader.close();
        System.out.println(new String(c, 0, len));
    }
}
程序执行结果为:


图 1 程序的运行结果

Java OutputStreamWriter

OutputStreamWriter 是输出字符流和输出字节流之间的桥梁。其主要功能是将字节输出流转换成字符输出流,即将要写入的字符使用特定的编码转码成字节,再将转换后的字节写入底层字节输出流中。可以指定编码。它是完成这一转换过程的类。

为了提高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中:
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

OutputStreamWriter 类的构造方法如下:
【实例】创建一个新的文件对象,把它作为字节输出流的目标端,然后通过转换输出流,把字符流转换成字节流,把一串字符串输出到文件中。
import java.io.*;

public class OutputStreamW {
    public static void main(String[] args) throws Exception {
        File f = new File("d:\\t.txt"); // 创建文件对象
        // 创建一个字节输出流对象,把它的内容转换到字符输出流中
        Writer out = new OutputStreamWriter(new FileOutputStream(f));
        out.write("hello world");
        out.close(); // 关闭流
    }
}
程序运行结果为在“d:\test.txt”文件中写入“hello world”字符串,如下图所示:


图 2 程序的运行结果

相关文章