A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋国涛 黑马帝   /  2011-9-7 18:41  /  2200 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这些天一直在看IO流章节,这一张应该是重点章节哈,这一张提到了各种各样的流,而且是成对出现的,现在总结了一下,有几个困惑,希望得到大家的指导~~~
       1)“流”的这个概念是相对于什么说的呢?怎样判断一个流是输入流,还是输出流呢?
       2)FileOutputStream与FileInputStream, BufferedOutputStream与BufferedInputStream,DataOutputStream 与DataInputStream ,PipedInputStream与PipedOutputStream  在众多的流中,怎样能够快速的区别它们呢?它们各自适用什么样的场合呢?
       3)FileOutputStream 可以作为包装类包装BufferedOutputStream 么?

:hug: 。。。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

6 个回复

倒序浏览
黑马网友  发表于 2011-9-7 19:00:14
沙发
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位)。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 很详细!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-7 20:37:01
藤椅
楼上说的不错,我再唠叨几句。
流和文件就相当于水和一桶水的关系,不停地往桶里面注水,那么当水桶满的时候,就相当于一个完整的文件了。
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]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-8 14:15:20
板凳
:lol 我也来啰嗦一下


输入输出流,个人认为是一个相对的概念。

假设有2个程序,A和B,

A发送数据给B,这个时候,对于A来说,A发出的数据就是输出流
                      而对于B来说,A发来的数据就是输入流

就是这样
回复 使用道具 举报
黑马网友  发表于 2011-9-8 14:45:19
报纸
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:27
地板
我就不罗嗦了,二楼应该看过马士兵的视频吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马