如下我们看一个实例,从控制台输入字符串,并将输入字节流转换为字符流。
package com.molyeo.java.io; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; /** * Created by zhangkh on 2018/8/22. */ public class StreamTransform { public static void main(String[] args) { String readStr = ""; try (InputStreamReader inputStreamReader = new InputStreamReader(System.in, "UTF-8"); BufferedReader bufferReader = new BufferedReader(inputStreamReader) ) { System.out.println("Please enter a string"); readStr = bufferReader.readLine(); System.out.println("The input is " + Integer.valueOf(readStr)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } } }输出字节流转换
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:
文件: FileInputStream, FileOutputStream,FileReader, FileWriter
byte[] : ByteArrayInputStream, ByteArrayOutputStream
Char[]: CharArrayReader, CharArrayWriter
String: StringBufferInputStream, StringBufferOuputStream,StringReader, StringWriter
网络数据流: InputStream, OutputStream, Reader, Writer
格式化输出: PrintStream, PrintWriter
按是否要缓冲缓冲: BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
按数据格式二进制格式(只要不能确定是纯文本的) : InputStream, OutputStream 及其所有带 Stream 结束的子类。
纯文本格式(含纯英文与汉字或其他编码方式); Reader, Writer 及其所有带 Reader, Writer 的子类。