转换流 InputStreamReader

Posted on 2018-10-07 21:11  豆豆2018  阅读(244)  评论(0编辑  收藏  举报

通常接触到字节流和字符流,但是有一个流是这两个流的桥梁,inputStreamReader

字符流的结构如下

 

可以看到inputStreamReader是继承Reader ,它的子类是FileReader ,但Reader(),FileReader()构造方法接受的是File类型的文件路径,

但是InputStreamReader()接受的是字节流!,所以他是一个桥梁,接受字节流,转为字符流

InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

每个调用InputStreamReader的read()方法之一可能会导致从底层字节输入流读取一个或多个字节。 为了使字节有效地转换为字符,可以从底层流读取比满足当前读取操作所需的更多字节。

为了最大的效率,请考虑在BufferedReader中包装一个InputStreamReader。 例如:

  BufferedReader in
   = new BufferedReader(new InputStreamReader(System.in)); 

在TCP传输中,我们通过套接字的方法socket.getOutPutStream(),可以拿到字符输出/输入流,
但是如果要写入文件显然字符流比较方便,这时候我们通过转换字节流实现,
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));