Java中FilterInputStream和FilterOutputStream的用法详解
作者:kuiwu-wang 时间:2023-10-02 06:47:03
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();
}
}
标签:Java,FilterInputStream,FilterOutputStream
0
投稿
猜你喜欢
使用Springboot封装一个自适配的数据单位转换工具类
2022-06-07 07:12:14
Java多线程:生产者与消费者案例
2021-06-30 05:47:08
Spring注解Autowired的底层实现原理详解
2022-10-19 11:49:44
Java将字符串转化为数组的两种方法
2021-07-07 20:33:49
最优雅地整合 Spring & Spring MVC & MyBatis 搭建 Java 企业级应用(附源码)
2023-09-26 18:27:57
深入同步访问共享的可变数据分析
2023-05-08 00:16:49
Java实现删除排序数组中重复元素的方法小结【三种方法比较】
2023-09-28 15:21:48
C#调用VB进行简繁转换的方法
2023-02-25 23:19:43
java基础-数组扩容详解
2022-05-24 00:34:58
springboot @Valid注解对嵌套类型的校验功能
2023-07-01 13:02:18
微服务通过Feign调用进行密码安全认证操作
2023-07-30 02:43:38
java使用IO流对数组排序实例讲解
2023-09-04 02:24:19
java动态线程池的简单实现思路
2023-10-18 15:53:46
java 生成xml并转为字符串的方法
2023-01-07 08:27:30
Java集合教程之Collection实例详解
2022-12-01 23:45:13
Android实现层叠卡片式banner
2023-03-04 03:57:08
C#实现简易多人聊天室
2023-02-06 06:09:47
JAVA多线程知识汇总
2021-08-03 09:04:47
c#调用vc写的ocx控件示例
2021-09-26 19:34:00
细谈java同步之JMM(Java Memory Model)
2023-11-23 13:09:33