一:OutPutStream类:    

public abstract class OutputStream

extends Object implements Closeable, Flushable

这个类是所有表示输出流的父类,所有继承这个类的子类都必须实现写的方法. 这个类中定义了close,flush,write方法

  1.FileOutputStream :

    public class FileOutputStream extends OutputStream

    这个类用来想文件中写入原生的数据byte或byet[].构造的时候可以传入FIle,filename,或FileDescription. FileDescription只记录了一个文件,socket或其他数据源的唯一的句柄.  然后一个需要注意的就是,在FileOutputStream的构造函数中,可以指定是否在写入时追加数据. 然后,这个类中有一个finalize的方法,这个方法用来保证,在这个对象被回收的时候已经被close掉了.也就是在这个方法里其实调用了close方法.这这一层的类中,只有这个类有这个方法.

  2.PipedOutputStream

    public class PipedOutputStream extends OutputStream

    这个类主要用来向管道里写入数据.管道是用来在线程中传递数据的.同样的,这个类也是像管道里写入原生的数据:byte或byte[].然后,这个类是一个管道的输出端.可以通过这个类的connect方法来和一个PipedInputStream类对象连接起来.但是这个类没有finalize方法.PS,当管道的读入方想要从一个没有写入数据的管道中去读数据时,这个线程就会被挂起.

  3.ByteArrayOutputStream

  public class ByteArrayOutputStream extends OutputStream

    这个类实现的是将数据写入一个内置的buff中,buff的定义是byte[],而且这个类会自动的对buff进行扩容.在这个类中有俩个proteccted的域,buff和count-记录buff的大小.当然,同样的这个类也是写入原生的数据,byte,byte[].类中的reset方法会把count置为0,也就是把这个对象中的数据都清零了.可以通过toByteArray(),或toString来返回buff的数据.当然,在使用toString的时候可以指定编码的方式.然后还有一个WriteTo(OutputStream)方法,可以把buff中的数据直接写入另外一个OutputStream中.另外,这个类的flush是没有什么用的.

  4.FilterOutputStream

  public class FilterOutputStream extends OutputStream

    Ok,这个类和上面三个有很大的不同.这个类本身并不是一个OutputStream,它只是对其他outputStream的一个装饰.在它的内部有一个域:outputStream对象,也就是这个类的底层真正的outputStream.在构造的时候要给出底层所依赖的OutputStream,然后提供的写入的方法也只是写入原生的数据,如byte或byte[]然后这个类的主要作用是为写出提供更多的方法和功能:

    a public class BufferedOutputStream extends FilterOutputStream

      这个类主要提供了buff的功能,这个类中有俩个域,一个时buff-byte[],还有一个就是buff的大小count.这个buff的大小在对象构造好后就不会变了.同样的,这个类所提供的写入方法也是写入一些原生的数据-byte或byte[].然后这个类的flush方法比较重要,要记住去调用这个方法在close前.

    b.public class DataOutputStream extends FilterOutputStream implements DataOutput

      这个类的主要功能是提供了一些方法可以向底层的OutputStream中写入一些java原生类型的数据,入string,int等.然后这个类没有提供buff的功能.

二 InputStream类:

public abstract class InputStream
extends Object
implements Closeable

这个类代表了与byte有关的输入流.提供了读入原始数据的功能:如byte,byte[].还有一个mark方法,可以用来标记读到的当前的byte的位置,然后调研reset后,就会重新再回到这个位置来读,这个功能是通过将读过的数据缓存来实现的.在调用mark的方法的时候,可以指定缓存的数据的长度,如果mark后读入的数据的长度超过了这个长度,这个mark的作用就会消失.还有一个skip的方法,可以用来跳过读入的一些byte;

  1.FileInputStream

  public class FileInputStream
  extends InputStream

   ok,这个类表示从一个文件中读入的raw byte数据流.然后叶基本上没有什么很特别的方法需要讲,基本和父类一致.

  2.PipedInputStream

   public class PipedInputStream extends InputStream  

    ok,这个类提供了一个循环的buff来存储从pipe中读入的数据.然后这个buff也是固定后就不可变了.再然后这个类也就没有什么很特别的了.

  3.ByteArrayInputStream

    public class ByteArrayInputStream extends InputStream    

    这个类主要是从一个外部提供的buff-byte[]中来读入数据.在构造这个对象的时候,为它提供一个buff,然后就可以读入了,然后很特别的方法也没有什么.然后就是这个  对象的close方法也是没有什么很大的作用的.

  4.SequenceInputtream

    public class SequenceInputStream extends InputStream

    这个类的作用主要是提供了通过外部的多个inputStream来读入数据的方法.它本身并不是一个inputStream.而是通过顺序,将它内部的一些inputStream来一个个的  读完.可以看一下他的构造函数:SequenceInputStream(Enumeration<? extends InputStream> e);SequenceInputStream(InputStream s1, InputStream s2)

  这个类的close方法,会关闭它内部含有的所有的inputStream.

  5.FileterInputStream

    public class FilterInputStream extends InputStream

    ok,这个类和对应的outputStream的作用是一致的,它本身并不是一个inputStream,只是为其他的inputStream做一个装饰.提供一些功能:

      a)public class FilterInputStream extends InputStream   ok,这个也很简单,和对应的outputStream的内部结构是一致的.

      b)public class DataInputStream extends FilterInputStreamimplements DataInput   ok,这个也一样,提供一些读入java原生类型的对象的方法.

      c)public class PushbackInputStream extends FilterInputStream  这个类提供了一个unread的功能,可以在读取的过程中,将一写byte[]push back进数据流,然.

    在后续的read中再读入.实现方法是在这个类中有一个buff-byte[].用来将pushback的数据放入.这个buff的容量也是固定后就不可不变了.

ok,通过这些总结可以看出,InputStream和OutputStream的都是读入和读出Byte流的,只是FileterXXXStream可以提供一些额外的功能,比如读入读出java的原生数据等.

												

JAVA IO包的整理---------InputStream和OutputStream的更多相关文章

  1. Java IO(四) InputStream 和 OutputStream

    Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...

  2. JAVA IO包的整理---------Writer和Reader

    一 Writer public abstract class Writer extends Object implements Appendable, Closeable, Flushable 这个类 ...

  3. JAVA IO包的整理---------Exception

    EOFException Signals that an end of file or end of stream has been reached unexpectedly during input ...

  4. Java:IO流之字节流InputStream、OutputStream详解

    字节流: (抽象基类)InputStream类(读): (抽象基类)OutputStream类(写):   InputStream: 构造方法摘要 InputStream()              ...

  5. java(jdk1.7) IO系列01之InputStream和OutputStream解析

    1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,Inpu ...

  6. java.io包详细解说

    转自:http://hzxdark.iteye.com/blog/40133 hzxdark的博客 我不知道各位是师弟师妹们学java时是怎样的,就我的刚学java时的感觉,java.io包是最让我感 ...

  7. java.io包中的字节流—— FilterInputStream和FilterOutputStream

    接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...

  8. Java:输入输出流 java.io包的层次结构

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  9. 字节输入流:io包中的InputStream为所有字节输入流的父类。

    字节输入流:io包中的InputStream为所有字节输入流的父类. Int read();读入一个字节(每次一个): 可先使用new  byte[]=数组,调用read(byte[] b) read ...

随机推荐

  1. 二分 连续上升子序列变形 UVA1471

    最大上升子序列解法: 1.动规转移方程 2.(nlogn) #include<cstdio> #include<algorithm> using namespace std; ...

  2. Spring Cloud之统一fallback接口

    每个方法都配备一个fallback方法 不利于开发的 用类的方式 并且整个方法都是在同一个线程池里面的 主要对于client的修改: pom: <project xmlns="http ...

  3. CSS3 3D立体柜子实现

    1. [图片] 20140811233657.jpg 2. [图片] 120140811233846.jpg ​3. [代码][CSS]代码 body {      background-color: ...

  4. json-lib简单处理json和对json的简单介绍

    JSON 1.json是什么? *它是js提供的一种数据交换格式 2.json的语法 *{}:是对象! >属性名必须使用双引号括起来!单引号不行!!! >属性值: *null *数值 *数 ...

  5. C++中的前置和后置++

    在C++中进行操作符重载的时候,前置++返回的是一个引用. 这就设计到了对于基本变量进行前置操作时候的理解了. 例如,对于int类型变量,在进行前置++的时候,是会将i进行加1,然后返回i的引用.而i ...

  6. 08 - Django应用第五步

    1 自动测试 自动测试与测试的不同在于, 自动测试的测试工作是交给系统完成的 测试也有分类和级别, 有的用于一些细微的细节, 有的是针对整个软件整体 测试会保证一些看起来正常运行的功能在实际的多种情况 ...

  7. Android数据存储的五种方法汇总

    本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 ...

  8. 【遍历二叉树】03二叉树的后序遍历【Binary Tree Postorder Traversal】

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的后序遍历的 ...

  9. Mybatis generator配置文件及说明

    项目采用sring mvc + mybatis 组合,这里简单介绍下mybatis的应用: 我的IDE是STS(Spring + Tool + Suite), 安装Mybatis Generator插 ...

  10. openfire存储中文字符乱码解决办法

    转载于: Xmpp问题总结:处理Openfire 中文乱码问题(2) openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据存储可以采用多种数据库,如MySQL ...