JAVA IO包的整理---------InputStream和OutputStream
一: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的更多相关文章
- Java IO(四) InputStream 和 OutputStream
Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...
- JAVA IO包的整理---------Writer和Reader
一 Writer public abstract class Writer extends Object implements Appendable, Closeable, Flushable 这个类 ...
- JAVA IO包的整理---------Exception
EOFException Signals that an end of file or end of stream has been reached unexpectedly during input ...
- Java:IO流之字节流InputStream、OutputStream详解
字节流: (抽象基类)InputStream类(读): (抽象基类)OutputStream类(写): InputStream: 构造方法摘要 InputStream() ...
- java(jdk1.7) IO系列01之InputStream和OutputStream解析
1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,Inpu ...
- java.io包详细解说
转自:http://hzxdark.iteye.com/blog/40133 hzxdark的博客 我不知道各位是师弟师妹们学java时是怎样的,就我的刚学java时的感觉,java.io包是最让我感 ...
- java.io包中的字节流—— FilterInputStream和FilterOutputStream
接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...
- Java:输入输出流 java.io包的层次结构
1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...
- 字节输入流:io包中的InputStream为所有字节输入流的父类。
字节输入流:io包中的InputStream为所有字节输入流的父类. Int read();读入一个字节(每次一个): 可先使用new byte[]=数组,调用read(byte[] b) read ...
随机推荐
- 二分 连续上升子序列变形 UVA1471
最大上升子序列解法: 1.动规转移方程 2.(nlogn) #include<cstdio> #include<algorithm> using namespace std; ...
- Spring Cloud之统一fallback接口
每个方法都配备一个fallback方法 不利于开发的 用类的方式 并且整个方法都是在同一个线程池里面的 主要对于client的修改: pom: <project xmlns="http ...
- CSS3 3D立体柜子实现
1. [图片] 20140811233657.jpg 2. [图片] 120140811233846.jpg 3. [代码][CSS]代码 body { background-color: ...
- json-lib简单处理json和对json的简单介绍
JSON 1.json是什么? *它是js提供的一种数据交换格式 2.json的语法 *{}:是对象! >属性名必须使用双引号括起来!单引号不行!!! >属性值: *null *数值 *数 ...
- C++中的前置和后置++
在C++中进行操作符重载的时候,前置++返回的是一个引用. 这就设计到了对于基本变量进行前置操作时候的理解了. 例如,对于int类型变量,在进行前置++的时候,是会将i进行加1,然后返回i的引用.而i ...
- 08 - Django应用第五步
1 自动测试 自动测试与测试的不同在于, 自动测试的测试工作是交给系统完成的 测试也有分类和级别, 有的用于一些细微的细节, 有的是针对整个软件整体 测试会保证一些看起来正常运行的功能在实际的多种情况 ...
- Android数据存储的五种方法汇总
本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 ...
- 【遍历二叉树】03二叉树的后序遍历【Binary Tree Postorder Traversal】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的后序遍历的 ...
- Mybatis generator配置文件及说明
项目采用sring mvc + mybatis 组合,这里简单介绍下mybatis的应用: 我的IDE是STS(Spring + Tool + Suite), 安装Mybatis Generator插 ...
- openfire存储中文字符乱码解决办法
转载于: Xmpp问题总结:处理Openfire 中文乱码问题(2) openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据存储可以采用多种数据库,如MySQL ...