OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
代理对是一个字符,它由两个char 值序列表示:高代理项的范围为 'uD800' 到 'uDBFF',后跟范围为 'uDC00' 到 'uDFFF' 的低代理项。
错误代理元素 指的是后面不跟低代理项的高代理项,或前面没有高代理项的低代理项。
此类总是使用字符集的默认替代序列替代错误代理元素和不可映射的字符序列。如果需要更多地控制编码过程,则应该使用 CharsetEncoder 类。
实例:将指定的字符串和字符数组写入到磁盘文件中,使用OutputStreamWriter将输出字节流转换成输出字符流。
package io.writer;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterTest {
public static void main(String[] args) {
BufferedWriter w = null;
try {
w = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(new File("document/strwamWriter.txt"))));
w.write( "hello world" );
w.write( "helloWorld".toCharArray() );
} catch(Exception e) {
e.printStackTrace();
} finally {
if ( null != w ) {
try {
w.close();
w = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}