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 ...
随机推荐
- cmd(或者说DOS窗口)输出内容到文件
格式是:command >> filefullpath 格式是:DOS命令>>文件名全路径 举例说明: dir *.* >> D:\abc.txt dir *.* ...
- html怎样可是使文本框内容不可修改
html怎样可是使文本框内容不可修改 <input type="text" readonly="readonly" onfocus="alert ...
- python-多线程趣味(锁)
接上一篇,程序员在敲代码的时候觉得无聊,无聊的时候,会想到去吃零食,那么假如一个函数: #! /usr/bin/env python #coding=utf-8 ''' ''' import time ...
- JavaUtil_00_资源帖
一.精选工具包 1.Hutool Hutool wiki 二.资源 1.
- MySQL--Basic(二)
USE db_name; CREATE DATABASE school; Use school; CREATE TABLE `StuInfo` ( `STU_ID` ) NOT NULL , `STU ...
- QMainFrame类
一.简介: 1.QMainFrame类提供了应用程序的主窗口,因为它可以添加菜单.工具条.状态栏和停靠窗口,同时也支持单文档窗口和多文档窗口,这是它和其他窗口不一样的地方. 2.QMainFrame窗 ...
- linux命令学习笔记(1):ls命令
ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单 如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查 看li ...
- Java 时间和日期类型的 Hibernate 映射
以下情况下必须显式指定 Hibernate 映射类型 一个 Java 类型可能对应多个 Hibernate 映射类型. 例如: 如果持久化类的属性为 java.util.Date 类型, 对应的 Hi ...
- eslipse 修改tomcat server location 解决HTTP Status 404 – Not Found
Eclipse中tomcat service设置选择window ----show view---services可以看到服务的面板双击tomcat进入配置界面Service Locations(Sp ...
- Android SQLite学习指南
一.SQLite简介 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对 ...