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 ...
随机推荐
- 暑假集训第一周比赛C题
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/C C - 学 Crawling in process... C ...
- 算法(Algorithms)第4版 练习 1.4.6
(1)sum = N + N/2 + N/4 + …… + 1 假设N是2的倍数(N = 2q),则sum = N -1 ~ N (2)sum = 1+2+……N/2 同(1)分析,sum = N/ ...
- ML三(人工神经网络)
人工神经网络 Artificial Neural Nerworks 基本术语概念: 人工神经网络(Artificial Neural Networks,ANN) 感知器(Perceptron):以一个 ...
- Spark- Spark基本工作原理
Spark特点: 1.分布式 spark读取数据时是把数据分布式存储到各个节点内存中 2.主要基于内存(少数情况基于磁盘,如shuffle阶段) 所有计算操作,都是针对多个节点上内存的数据,进行并行操 ...
- Javascript 模块化编程 --RequireJs
什么是模块化 模块就是实现特定功能的一组方法,常见的几种js写法 原始写法 function A() { } function B() { } 上面函数A()和B()组成一个模块,使用的时候直接调用就 ...
- 数据库+maven
1.mysql <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...
- IpIImage -> CvMat 转换方法
Ipl转为CvMat 一般为这两种方法: 1: /*cvGetMat*/ CvMat matheader; CvMat * mat = cvGetMat(img, &matheader); 2 ...
- bzoj-1588 1588: [HNOI2002]营业额统计(BST)
题目链接: 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 13596 Solved: 5049[Submi ...
- 解决jquery动态创建元素绑定事件失效问题
存在问题 在我们使用jquery动态创建元素后往往会遇到一些问题,如: 给.button按钮绑定了点击时间,执行alert:(1); 点击事件代码如下: <script>$("# ...
- NYOJ-括号配对问题--------待解决,RE
描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的 ...