黑马程序员技术交流社区

标题: io流的一些疑惑 [打印本页]

作者: 史龙贤    时间: 2012-9-27 00:38
标题: io流的一些疑惑
本帖最后由 屈俊材 于 2012-9-27 08:02 编辑

流在java中是怎么时候用到的?在什么情况下使用? 有什么作用?是在读数据的时候使用吗?inputstream和outputstream有什么区别?我就知道一个是输入一个是输出,到底是输入和输出到哪里去?此外还分文件字符流和文件字节流,缓冲流数组流,字符串流,对象流等。为啥要分为那么多的流?
作者: 宫明星    时间: 2012-9-27 00:58
本帖最后由 宫明星 于 2012-9-27 01:09 编辑

IO流是用于操作数据,数据的最常见体现形式是文件。
什么情况下使用:处理设备之间的数据传输的时候用得到。不管是读数据还是写数据都可以使用。
InputStream ,OutputStream两个都是字节流。二者区别就是一个是输入流,一个是输出流。至于输入输出到哪里去,要看你程序的源和目的。

字符流和字节流的不同就是读取方式不同。
Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。
Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

但是字符流只适合文本,使用字符流读取一些图片或者mp3会失败。所以传输图片或者mp3一般都是使用字节流。
BufferedWriter和BufferedReader是用于字符流的缓冲。提高对数据的读写效率,对流的功能进行了增强。要结合字符流进行使用。

有时候需要在字节和字符之间转换,比如 读取需要字节流,输出需要字符流。因为装换成字符流会更高效,那就需要运用到转换流。InputStreamReader,OutputStreamWriter。

整个IO流体系内容比较多,只能说个大概,更具体的只能去多听听视频了。

作者: 叶征东    时间: 2012-9-27 01:50
本帖最后由 叶征东 于 2012-9-27 02:41 编辑


上图是一个文件复制的过程
从上图中很容易看出:
inputstream和outputstream有什么区别,
到底是输入和输出到哪里去.

流为什么分成很多种,二楼已经说了,我补充一下,有的流提供很方便的操作方法.如:
BufferedReader的readeLine()方法;
BufferedWriter的newLine()方法;
RandomAccessFile的seek(),等

引用二楼的话"整个IO流体系内容比较多,只能说个大概,更具体的只能去多看看视频了".  呵.....

作者: 明光照    时间: 2012-9-27 09:20
Java IO的一般使用原则:
一、按数据来源(去向)分类:
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、是Char[]: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringWriter
5、网络数据流:InputStream, OutputStream, Reader, Writer

二、按是否格式化输出分:
1、要格式化输出:PrintStream, PrintWriter

三、按是否要缓冲分:
1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter

四、按数据格式分:
1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类
2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类

五、按输入输出分:
1、输入:Reader, InputStream类型的子类
2、输出:Writer, OutputStream类型的子类

六、特殊需要:
1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter
2、对象输入输出:ObjectInputStream, ObjectOutputStream
3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4、合并输入:SequenceInputStream
5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader





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