黑马程序员技术交流社区
标题:
有疑惑,请教大家。。。
[打印本页]
作者:
宋国涛
时间:
2011-9-7 18:41
标题:
有疑惑,请教大家。。。
这些天一直在看IO流章节,这一张应该是重点章节哈,这一张提到了各种各样的流,而且是成对出现的,现在总结了一下,有几个困惑,希望得到大家的指导~~~
1)“流”的这个概念是相对于什么说的呢?怎样判断一个流是输入流,还是输出流呢?
2)FileOutputStream与FileInputStream, BufferedOutputStream与BufferedInputStream,DataOutputStream 与DataInputStream ,PipedInputStream与PipedOutputStream 在众多的流中,怎样能够快速的区别它们呢?它们各自适用什么样的场合呢?
3)FileOutputStream 可以作为包装类包装BufferedOutputStream 么?
:hug: 。。。
作者:
匿名
时间:
2011-9-7 19:00
IO包括输入和输出流,输入流指的是将数据以字符或字节形式从外部媒介比如文件、数据库等读取到内存中所以也分为字符输入流和字节输入流。
输出流指的是将内存中的数据写入外部媒介,也分为了字符输出流和字节输出流。
java.io 的描述
通过数据流、序列化和文件系统提供系统输入和输出。
流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
Java流输入输出基本如原理
Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。
在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。
Java流的分类
按流向分:
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
java.io常用类
JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类。
InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
作者:
匿名
时间:
2011-9-7 20:37
楼上说的不错,我再唠叨几句。
流和文件就相当于水和一桶水的关系,不停地往桶里面注水,那么当水桶满的时候,就相当于一个完整的文件了。
FileInputStream是InputStream的子类,由名称上就可以知道, FileInputStream主要就是从指定的档案中读取资料至目的地。
FileOutputStream是OutputStream的子类,顾名思义,FileInputStream主要就是从来源地写入资料至指定的档案中。你自己联想一下水与水桶想一下。
Buffered前缀当然可以理解为缓冲的意思,这样在文件没正式形成之前可以进行相应的改变,很实用。像如水盛满后就封装的话,在注入的时候可以向水里面加些糖,就是这个道理。
有时没有必要存储整个对象的信息,而只是要存储一个对象的成员数据,成员数据的类型假设都是Java的基本数据类型,这样的需求不必使用到与Object输入、输出相关的流对象,可以使用DataInputStream、DataOutputStream来写入或读出数据。例子就不举了,自己碰到的时候就会明白。
PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据。
ps:[color=Red]pipe有管道的意思,因此PipedInputStream与PipedOutputStream 你懂得~[/color]
作者:
匿名
时间:
2011-9-8 14:15
:lol 我也来啰嗦一下
输入输出流,个人认为是一个相对的概念。
假设有2个程序,A和B,
A发送数据给B,这个时候,对于A来说,A发出的数据就是输出流
而对于B来说,A发来的数据就是输入流
就是这样
作者:
匿名
时间:
2011-9-8 14:45
java.lang.Object
java.io.InputStream 表示输入字节流的所有类的超类
java.io.FilterInputStream
java.io.BufferedInputStream 缓冲
java.lang.Object
java.io.InputStream
java.io.FileInputStream 从文件系统中的某个文件中获得输入字节。
FileInputStream与BufferedInputStream可不是继承关系,应该不能作为包装类包装吧。
但都可以用 java.io.InputStream来包装。
作者:
匿名
时间:
2011-9-9 01:44
我就不罗嗦了,二楼应该看过马士兵的视频吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2