当前位置: 代码迷 >> J2SE >> InputStream 和 InputStreamReader 的区别?解决方案
  详细解决方案

InputStream 和 InputStreamReader 的区别?解决方案

热度:427   发布时间:2016-04-24 12:51:57.0
InputStream 和 InputStreamReader 的区别??
有人说:
 字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。 
我可以前一直认为都是字符流.
我的看法对吗??

------解决方案--------------------
不对!
一个字符是两个字节, 可以说字节比字符低级, 或者说字符是对字节的包装, 
字节流可以读取任何文件, 可以说字符流可以做到的事情, 字节流都可以做到, 反之则不可以. 但字节流效率比较低下. 
给你举个例子, 有一次我们有个需求, 要读取一个pdf文件, 我开始用字符流BufferedReader读取, 结果读出来的文件是乱码, 换成FileInputStream就可以了, 这是因为pdf文件是二进制文件, 那你一个字节一个字节的读取, 会破坏文件. 只能用低级的字节流. 

------解决方案--------------------
楼主的理解似乎不是正解哦
查一下JDK API文档不难发现
inputstream:[/b]
public abstract class InputStreamextends Object implements Closeable
他实现了 Closeable接口,继承 Object 
直接已知子类: 
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream 

[b]InputStreamReader

public class InputStreamReaderextends Reader
他继承自 Reader
直接已知子类: 
FileReader 

似乎所有字符流继承于Reader,Writer才对。
------解决方案--------------------
java.io包中定义多个类型的流来实现输入/输出功能:
楼主所提到的字节流和字符流是按处理数据单位来划分的。
字节流 字符流
输入 InputStream Reader
输出 OutputStream Writer
LZ说:“字符流继承于InputStreamReader OutputStreamWriter”,这个说的不对,Reader,Writer才是所有字符流的父类。

LZ又说了:“FileInputStream就可以了, 这是因为pdf文件是二进制文件, 那你一个字节一个字节的读取, 会破坏文件.”,这是因为我们汉字在java中占1个字符(2个字节),当你一个字节一个字节的读,读的是半个字?显示出来当然就是乱码, FileInputStream他是 字节流 当然不能读字符 ,如果你要正常的 读出一个字符(一个汉字),那你 就应该用FileReader!

不知道说清楚没,呵呵! 说的不好请大家继续帮LZ解释下。
------解决方案--------------------
探讨
不对!
一个字符是两个字节, 可以说字节比字符低级, 或者说字符是对字节的包装,
字节流可以读取任何文件, 可以说字符流可以做到的事情, 字节流都可以做到, 反之则不可以. 但字节流效率比较低下.
给你举个例子, 有一次我们有个需求, 要读取一个pdf文件, 我开始用字符流BufferedReader读取, 结果读出来的文件是乱码, 换成FileInputStream就可以了, 这是因为pdf文件是二进制文件, 那你一个字节一个字节的读取, 会破坏文件. 只…

------解决方案--------------------
你可以自己写一段代码验证下就出来了!
看看API!
------解决方案--------------------
探讨
java.io包中定义多个类型的流来实现输入/输出功能:
楼主所提到的字节流和字符流是按处理数据单位来划分的。
字节流 字符流
输入 InputStream Reader
输出 OutputStream Writer
LZ说:“字符流继承于InputStreamReader OutputStreamWriter”,这个说的不对,Reader,Writer才是所有字符流的父类。

LZ又说了:“FileInputStream就可以了, 这是因为pdf文件是二进制文件, 那你一个字节一个字节…

------解决方案--------------------
java的IO 让人想吐,好在吐啊吐的就习惯了,总之历史原因,性能倒是一方面,早期的还有bug呢,
参考
http://blog.csdn.net/sunyujia/archive/2008/06/15/2551297.aspx
  相关解决方案