Java中FilterInputStream和FilterOutputStream的用法詳解
FilterInputStream
FilterInputStream 的作用是用來“封裝其它的輸入流,并為它們提供額外的功能”。它的常用的子類有BufferedInputStream和DataInputStream。
BufferedInputStream的作用就是為“輸入流提供緩沖功能,以及mark()和reset()功能”。
DataInputStream 是用來裝飾其它輸入流,它“允許應(yīng)用程序以與機(jī)器無關(guān)方式從底層輸入流中讀取基本 Java 數(shù)據(jù)類型”。應(yīng)用程序可以使用DataOutputStream(數(shù)據(jù)輸出流)寫入由DataInputStream(數(shù)據(jù)輸入流)讀取的數(shù)據(jù)。
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輸入流配合使用,“允許應(yīng)用程序以與機(jī)器無關(guān)方式從底層輸入流中讀寫基本 Java 數(shù)據(jù)類型”。
(03) PrintStream 是用來裝飾其它輸出流。它能為其他輸出流添加了功能,使它們能夠方便地打印各種數(shù)據(jù)值表示形式。
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(); } }
相關(guān)文章
簡述Java中進(jìn)程與線程的關(guān)系_動力節(jié)點Java學(xué)院整理
在 Java 語言中,對進(jìn)程和線程的封裝,分別提供了 Process 和 Thread 相關(guān)的一些類。本文首先簡單的介紹如何使用這些類來創(chuàng)建進(jìn)程和線程2017-05-05如何通過SpringBoot實現(xiàn)商城秒殺系統(tǒng)
這篇文章主要介紹了如何通過SpringBoot實現(xiàn)商城秒殺系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11Java Flink與kafka實現(xiàn)實時告警功能過程
這篇文章主要介紹了Java Flink與kafka實現(xiàn)實時告警功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01Java中對象的深復(fù)制(深克隆)和淺復(fù)制(淺克?。┙榻B
這篇文章主要介紹了Java中對象的深復(fù)制(深克隆)和淺復(fù)制(淺克?。?,需要的朋友可以參考下2015-03-03java實現(xiàn)ArrayList根據(jù)存儲對象排序功能示例
這篇文章主要介紹了java實現(xiàn)ArrayList根據(jù)存儲對象排序功能,結(jié)合實例形式分析了java針對ArrayList的相關(guān)運算、排序操作技巧,需要的朋友可以參考下2018-01-01MyBatis直接執(zhí)行SQL的工具SqlMapper
今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程
這篇文章主要為大家介紹了java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11