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 ...
随机推荐
- nginx expires缓存提升网站负载
语法: expires [time|epoch|max|off]默认值: expires off作用域: http, server, location使用本指令可以控制HTTP应答中的“Expires ...
- MyCat:开源分布式数据库中间件
mycat 的主要配置文件 schema.xml rule.xml server.xml 客户端连接mycat mysql -h192.168.1.1 -P8806 -uroot -pwangxiao ...
- Hessian 序列化和反序列化实现
先聊聊 Java的序列化,Java官方的序列化和反序列化的实现被太多人吐槽,这得归于Java官方序列化实现的方式. 1.Java序列化的性能经常被吐槽.2.Java官方的序列化后的数据相对于一些优秀的 ...
- 大话设计模式--外观模式 Facade -- C++实现实例
1. 外观模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用. 外观模式的使用场合: A: 设计初期阶段,应该要有意识的将不同的两个层分离. ...
- kreuz-frankfurt-sample-generic-2019-02-08.xodr文件解读
第1行:xml语法所遵循的版本. L2:文件封装标记. L3:Opendrive的主要修订编号 次要修订编号 供应商. L4:记录有关地理参考坐标系的参数,投影-横轴墨卡托 a-地球椭球长半 ...
- php简单实现通讯录采集,我的第一个php,适合新手
起源于要整理通讯录,原先用的是文件调查,现在学了php,就自己试一下.程序短小精悍,适于学习.有两个文件,bj.html用于显示和采集表单信息.bj.php用于处理数据和反馈结果.突出之处在于可以上传 ...
- Buffer类的详解(转)
Buffer 类是 java.nio 的构造基础.一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里,数据可被存储并在之后用于检索.缓冲区可以被写满或释放.对于 ...
- Confluence 6 找到未使用的空间
有时候,你希望找到你系统中没有使用的内容.有时候你也希望能够对这些内容进行更多的关注,但是如何找到一些有关长期不更新的页面,或者长期不使用的空间? View Space Activity 页面中的内容 ...
- C#中substring ()的用法
C#中substring ()的用法:http://www.cnblogs.com/bluespace/archive/2007/12/11/782336.html
- windows下安装 postgresql
1. 下载PostgreSQL的源代码.解压. 2. 在Windows平台下编译需要跳过一个权限的检测,否则在编译的时候可能会出现错误. 在\src\backend\main\main.c文件中将 ...