日期:2014-05-20  浏览次数:20695 次

几个IO流的区别是什么?什么条件下要用哪个呢?
FileInputStream 、BufferedInputStream 、 DataInputStream

区别和用途分别是什么呢?



------解决方案--------------------
多构造方法看,BufferedInputStream,DataInputStream都是需要FileInputStream的 。
首先通过FileInputStream(String name)得到输入流。
再把BufferedInputStream,DataInputStream套在FileInputStream 的外层 他们继承自FileInputStream
BufferedInputStream增加了方法read(byte[] b, int off, int len),可以更快的读取数据。
DataInputStream我想是在原来的字节流基础上再封装新增方法readInt(),readDouble()等。
所以FileInputStream相对比较简陋吧。也可以说BufferedInputStream,DataInputStream更高级更先进一些,呵呵。

------解决方案--------------------
这个问题都没必要问的。直接看API就能解决的。

1.FileInputStream 这个类是读取文件用的,构造器的参数就是文件对象或者文件名。
2.BufferedInputStream 这个类会对InputStream创建缓冲区,提高读取性能。
3.DataInputStream 这个类是读取Java数据用的,它扩展了InputStream的一些方法,
可以直接从IO中读取Java数据(尤其是元数据)。

用途:
1.可以从IO中读取二进制数据(二进制数据以byte数组表示)。
2.可以提高IO的读取性能。
3.可以从IO中读取Java数据。

说明:
我们都知道,字符保存到文件中,是存在编码问题的。
汉字在JVM内存中是以Unicode编码方式保存的,但是,硬盘文件很可能是GBK的编码,
所以,在读取GBK编码的文本文件时,FileReader要添加编码参数,采用GBK编码的方式,读入到内存当中。
Java的数据,在内存中也有一定的编码方式,保存到文件中,也需要类似的转换过程,
只不过,这个过程非常简单。
使用DataInputStream 就可以直接读取Java的元数据了,不必关注怎样将byte数组转换成Java元数据。

当然,这也造成了,在Java与其他语言(平台)通信时,不方便使用DataInputStream 。
------解决方案--------------------
建议多看看java的api。