黑马程序员技术交流社区

标题: 关于IO流中转换流的问题 [打印本页]

作者: 赵永康    时间: 2012-9-22 22:21
标题: 关于IO流中转换流的问题
各位大侠,今天我复习到了IO流,到了转换流的时候,想起了一个事情,具体就是这样的
InputStreamReader:是把字节输入流转换成字符输入流。 OutputStreamWriter:是把字符输出流转换成字节输出流。
那么在java中为什么就没有把字符流输入流转换成字节输入流呢?或者是把字节输出流转换成字符输出流呢??
以上纯属个人疑问,大侠们可以给点解释昂!!!

作者: 尤圣回    时间: 2012-9-22 22:58
你好漂亮
作者: 尤圣回    时间: 2012-9-22 22:58
如果是纯文本操作字符流效率要搞很多
作者: 李健_8    时间: 2012-9-22 23:05
完全可以的   这个得看具体情况  字符流和字节流是根据处理数据的不同来区分的。字节流按照8位传输,字符流按照16位传输
由于字符流使用Unicode字符集,支持多国文字,因此若流要跨越多种平台传输,应使用字符流。 字符流的传输效率比字节流的高
作者: 陈琦    时间: 2012-9-22 23:06
个人感觉InputStreamReader还是建立在字节流基础上,只是在操作的时候会调用其他方法,指定字符码,转换为字符。InputStreamReader 是把字节输入流转换成字符输入流,所以有InputStreamReader 对象存在的时候肯定有字节流对象存在,所以感觉没必要。如果一定要转换的话可以通过getByte();方法并指定相同的charset得来。
作者: 程振    时间: 2012-9-22 23:10
下面是java doc关于InputStreamReader的解释:
An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified charset. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.

Each invocation of one of an InputStreamReader's read() methods may cause one or more bytes to be read from the underlying byte-input stream. To enable the efficient conversion of bytes to characters, more bytes may be read ahead from the underlying stream than are necessary to satisfy the current read operation.

For top efficiency, consider wrapping an InputStreamReader within a BufferedReader. For example:

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

上面也说明了,把字节流转换成字符流是为了提高操作的效率,有需求就有提供者。
至于把字符---->字节的转换,你发现你没见过相应的用法吧,一般都是直接获取InputStream或者把InputStream继续封装。
因为对字符的操作比直接操作字节方便高效,也没人愿意字符流转换成字节流。
作者: 赵永康    时间: 2012-9-22 23:27
呵呵 感谢以上各位的解答 我就是好奇点把 想问问 看看行不行 呵呵 大侠的意思字节转换成字符就是操作的速度比原先快??
那么这个具体快多少?以及我们怎么能看出他的快 具体是怎么体现的额啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2