FilterInputStream
FilterInputStream 的作用是用来“封装其它的输入流,并为它们提供额外的功能”。它的常用的子类有BufferedInputStream和DataInputStream。
BufferedInputStream的作用就是为“输入流提供缓冲功能,以及mark()和reset()功能”。
DataInputStream 是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读取的数据。

FilterInputStream 源码(基于jdk1.7.40):

package java.io;
public class FilterInputStream extends InputStream {protected volatile InputStream in;protected FilterInputStream(InputStream in) {this.in = in;}public int read() throws IOException {return in.read();}public int read(byte b[]) throws IOException {return read(b, 0, b.length);}public int read(byte b[], int off, int len) throws IOException {return in.read(b, off, len);}public long skip(long n) throws IOException {return in.skip(n);}public int available() throws IOException {return in.available();}public void close() throws IOException {in.close();}public synchronized void mark(int readlimit) {in.mark(readlimit);}public synchronized void reset() throws IOException {in.reset();}public boolean markSupported() {return in.markSupported();}
}

FilterOutputStream 
FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。
(01) BufferedOutputStream的作用就是为“输出流提供缓冲功能”。
(02) DataOutputStream 是用来装饰其它输出流,将DataOutputStream和DataInputStream输入流配合使用,“允许应用程序以与机器无关方式从底层输入流中读写基本 Java 数据类型”。
(03) PrintStream 是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。

FilterOutputStream 源码(基于jdk1.7.40):

package java.io;public class FilterOutputStream extends OutputStream {protected OutputStream out;public FilterOutputStream(OutputStream out) {this.out = out;}public void write(int b) throws IOException {out.write(b);}public void write(byte b[]) throws IOException {write(b, 0, b.length);}public void write(byte b[], int off, int len) throws IOException {if ((off | len | (b.length - (len + off)) | (off + len)) < 0)throw new IndexOutOfBoundsException();for (int i = 0 ; i < len ; i++) {write(b[off + i]);}}public void flush() throws IOException {out.flush();}public void close() throws IOException {try {flush();} catch (IOException ignored) {}out.close();}
}

转载于:https://www.cnblogs.com/printN/p/6240724.html

Java中FilterInputStream和FilterOutputStream的用法相关推荐

  1. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  2. Java中PreparedStatement和Statement的用法区别

    Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Sta ...

  3. Java中static的含义和用法

    Java中static的含义和用法 static:静态的,用于修饰成员(成员变量,成员方法); 1.被static所修饰的变量或者方法会储存在数据共享区; 2.被static修饰后的成员变量只有一份! ...

  4. Java中栈和队列的用法 Stack And Queue

    Java中栈和队列的用法 栈的实现 使用Java的集合类Stack boolean isEmpty();//判断当前栈是否为空,等价于empty(); synchronized E peek();// ...

  5. java drawstring字体大小,JAVA中,drawstring 方法的用法,格式是什么啊

    啦啦啦额68的回答 Java中Graphics类的drawString()方法: i)drawString(String str,int x,int y): String str是可以在屏幕上显示的字 ...

  6. java中的Queue队列的用法

    大家好,欢迎来到雄雄的小课堂,今天给大家分享的是"java中的Queue队列的用法" 前言:好多人对Queue不是很熟悉,毕竟平时也不怎么用,遇到集合要么List要么map这些常用 ...

  7. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  8. Java中final的三种用法

    在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...

  9. Java中的final,finalized,finally用法

    Java中的final,finalized,finally用法 final: final可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或 ...

  10. java中super用来定义父类,Java中super的几种用法及与this的区别

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

最新文章

  1. 新视野计算机等级考试官网,计算机二级C语言
  2. 合并分支时有的文件删除了_GitGithub入门教程笔记(4)之分支管理一
  3. java-初识JVM的内存分配(5个区域)概念--系列(一)
  4. 200819C阶段一C++面向对象的编程思想
  5. SQL语言基础:触发器相关知识介绍​
  6. 对话彭军、楼教主:1.12亿美元融资来了,Pony.ai车队也已在路上 | 变局者
  7. 打印一种拓扑排序(假定给的是有向无环图时)DFS+栈
  8. Faster-Rcnn扫盲
  9. 顺序表和链表 相关知识点总结
  10. kmeans聚类理论篇
  11. Shopee数据获取逻辑
  12. HTML+CSS网页设计期末课程大作业:个人网站设计——个人介绍(7页) web前端开发技术 web课程设计 网页规划与设计
  13. Matlab/Simulink Embedded Coder一个非常迷幻的问题
  14. FieldTrip toolbox教程系列(1)-预处理-读取连续的EEG和MEG数据
  15. 初学者该掌握的计算机知识,初学者该如何学习电脑知识
  16. MMORPG网络游戏开发之用户管理
  17. 013达克效应|自视甚高与倾家荡产
  18. 台式计算机硬盘英寸,台式电脑硬盘和笔记本电脑硬盘有区别吗?台式机硬盘报价一般是多少?...
  19. Bugzilla详解
  20. 《痞子衡嵌入式半月刊》 第 15 期

热门文章

  1. Linux系统编程 -- 进程与线程之间差别 进程是系统资源分配的最小单位,线程是进程执行的最小单位
  2. 前台传递过来的参数遍历
  3. 微型计算机的工作过程是执行程序过程吗,微型计算机的工作过程和主要性能指标...
  4. ribbon基于接口配置超时_Spring Cloud第二篇:服务消费者RestTemplate+Ribbon
  5. 微控制器MCU四大平台你了解多少?(二)
  6. linux jdk环境变量配置不生效_Linux服务器JDK环境变量配置
  7. 【渝粤教育】国家开放大学2018年秋季 2409T中国古代文学(B)(1) 参考试题
  8. 【渝粤教育】国家开放大学2018年春季 3722-21T燃气输配工程 参考试题
  9. 【渝粤教育】电大中专药剂学基础知识 (2)_1作业 题库
  10. ROS-Kinetic安装turtlebot-3并仿真