Java 转换流

本文最后更新于:2024年3月18日 凌晨

Java 转换流

  • 转换流InputStreamReaderOutputStreamWriter完成字符与字符编码字节的转换,在字节流和字符流间架起了一道桥梁,类FileReaderFileWriter分别是两个转换流的子类,用于实现对文本文件的读写访问。

转换输入流(InputStreamReader)

  • 从前面的介绍可发现,InputStreamReaderReader的子类,一个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对字符流进行包装处理,如下图显示,进而可以用BufferedReaderreadLine()方法读取一行字符串。

1
2
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String x = in.readLine();

转换输出流(OutputStreamWriter)

  • OutputStreamWriterWriter的子类,一个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");