Java 转换流
本文最后更新于:2024年3月18日 凌晨
Java 转换流
- 转换流
InputStreamReader
和OutputStreamWriter
完成字符与字符编码字节的转换,在字节流和字符流间架起了一道桥梁,类FileReader
和FileWriter
分别是两个转换流的子类,用于实现对文本文件的读写访问。
- 从前面的介绍可发现,
InputStreamReader
是Reader
的子类,一个InputStreamReader
对象接受一个字节输入流作为源,产生相应的UTF-16
字符,类InputStreamReader
的常用构造方法如下。
public InputStreamReader(InputStream in)
:创建转换输入流,按默认字符集的编码从输入流读数据。
public InputStreamReader(InputStream in,Charset c)
:创建转换输入流,按指定字符集的编码从输入流读数据。
public InputStreamReader(InputStream in,String enc) throws UnsupportedEncod ing Exception
:创建转换输入流,按名称所指字符集的编码从输入流读数据。
- 以下代码建立的转换输入流将按
ISO8859-6
字符集编码从文件读数据,并将字节数据转换为相应的UTF-16字符。
1 2
| InputStream filein = new FileInputStream(file); Reader in = new InputStreamReader(filein,"iso-8859-6");
|
- 字符集编码规定了原始的8位字符与16为
Unicode
字符的等价对应关系,本地平台定义了其支持的字符集。
- 如果用该类强行将任意的字节转换为字符流是没有意义的,在实际应用中要根据流数据的特点来决定是否需要进行转换,例如,标准输入(键盘)提供的数据是字节形式的,实际上,从键盘输入的数据是字符系列,转换成字符流更符合应用的特点,因此使用
InputStreamReader
将字节流,又为了能一次性从键盘输入一样字符串,在用BufferedReader
对字符流进行包装处理,如下图显示,进而可以用BufferedReader
的readLine()
方法读取一行字符串。

1 2
| BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String x = in.readLine();
|
转换输出流(OutputStreamWriter)
- 类
OutputStreamWriter
是Writer
的子类,一个OutputStreamWriter
对象将UTF-16
字符转换为指定的字符编码形式写入到字节输出流,类OutputStreamWriter的常用构造方法如下:
public OutputStreamWriter(OutputStream out)
:创建转换输出流,按默认字符集的编码往输出流写数据。
public OutputStreamWriter(OutputStream out,Charset c)
:创建转换输出流,按指定字符集的编码往输出流写数据。
public OutputStreamWriter(OutputStream out,String enc)throws UnsupportedEncoding Exception
:创建转换输出流,按名称所指的字符集的编码往输出流写数据。
1 2
| OutputStream fileout = new FileOutputStream(file); Writer out = new outputStreamWriter(fileout,"iso-8859-6");
|