一.概念
OutputStreamWriter类将使用特定的字符编码方式,把Unicode字符流转换为字节流。而InputStreamReader类将包含字节(以某种字符编码方式表示的字符)的输入流转换为可以产生Unicode码元的读入器。 —– 《Java核心技术卷Ⅱ》
二.使用
1.OutputStreamWriter
OutputStreamWriter类用于将字符流转换为字节流,比如在程序中我们可以方便的操作字符,但如过需要把这些字符写到文件里面,就得将他们转换为字节。
import java.io.*;
import java.nio.charset.Charset;
public class OutputStreamWriterDemo {
public static void main(String[] args) {
try {
OutputStream outputStream = new FileOutputStream("C:\\Users\\sisheng\\Desktop\\OutputStreamWriterDemo.txt", true);
write(outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 将字符串写入文件OutputStreamWriterDemo.txt
* @param out
*/
private static void write(OutputStream out) {
String s = "java 语言学习";
System.out.println(Charset.defaultCharset());
try (Writer ow = new OutputStreamWriter(out, Charset.defaultCharset())) {
ow.write(s);
ow.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.InputStreamReader
InputStreamReader类用于将字节流转换为字符流,比如我们需要从文本文件中读取字符串到内存,就得把字节流转换为字符流。
public class InputStreamReaderDemo {
public static void main(String[] args) {
try {
InputStream inputStream = new FileInputStream("C:\\Users\\sisheng\\Desktop\\OutputStreamWriterDemo.txt");
read(inputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 将输入字节流转换成相应编码的输入字符流,供程序使用
*
* @param in
*/
private static void read(InputStream in) {
Reader reader = new InputStreamReader(in, Charset.defaultCharset());
int len = -1;
char[] chars = new char[10];
try {
while ((len = reader.read(chars)) != -1) {
System.out.print(new String(chars, 0, len)); //这里注意只打印0 -- len
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}