Java OutputStreamWriter和InputStreamReader的用法(附带实例)
Java 的整个 I/O 包分为字节流和字符流。除了这两类流之外,还提供两个转换流,这两个转换流实现将字节流变为字符流:
为了提高效率,可以考虑在 BufferedReader 内包装 InputStreamReader:
【实例】把“test.txt”文件的内容以字节输入流输入,通过输入转换流把字节流转换成字符流,然后把字符流中的字符送入字符数组中,并在控制台显示出来。

图 1 程序的运行结果
为了提高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中:
OutputStreamWriter 类的构造方法如下:
【实例】创建一个新的文件对象,把它作为字节输出流的目标端,然后通过转换输出流,把字符流转换成字节流,把一串字符串输出到文件中。

图 2 程序的运行结果
- OutputStreamWriter:Writer 的子类,将字节输出流变为字符输出流,即将 OutputStream 类型转换为 Writer 类型。
- InputStreamReader:Reader 的子类,将字节输入流转变为字符输入流,即将 InputStream 类型转换为 Reader 类型。
Java InputStreamReader
InputStreamReader 是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接收平台默认的字符集。每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。为了提高效率,可以考虑在 BufferedReader 内包装 InputStreamReader:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));InputStreamReader 的构造方法如下:
- InputStreamReader(InputStream in):创建一个使用默认字符集的 InputStreamReader;
- InputStreamReader(InputStream in, Charset cs):创建使用给定字符集的 InputStreamReader;
- InputStreamReader(InputStream in, CharsetDecoder dec):创建使用给定字符集解码器的 InputStreamReader;
- InputStreamReader(InputStream in,String charsetName):创建使用指定字符集的 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 类的构造方法如下:
- OutputStreamWriter(OutputStream out):创建使用默认字符编码的 OutputStreamWriter;
- OutputStreamWriter(OutputStream out, Charset cs):创建使用给定字符集的 OutputStreamWriter;
- OutputStreamWriter(OutputStream out, CharsetEncoder enc):创建使用给定字符集编码器的 OutputStreamWriter;
- OutputStreamWriter(OutputStream out, String charsetName):创建使用指定字符集的 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 程序的运行结果
相关文章
- Java InputStreamReader和OutputStreamWriter类的用法(附带实例)
- Java InputStreamReader和OutputStreamWriter转换流的用法(附带实例)
- Java转换流(InputStreamReader和OutputStreamWriter)的用法
- Java转换流:InputStreamReader和OutputStreamWriter
- Java语句:Java空语句、复合语句和表达式语句
- Java switch case语句详解
- Java输出九九乘法表
- Java foreach语句的用法
- Java return语句
- Java continue语句详解