標籤:數組 ted 關於 功能 filter 它的 put 位元組 實現
註:參考連結:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616187.html
1、在java中stream代表一種資料流(源),javaio的底層資料元,---(想像成水龍頭)
2、任何有能力產生資料流(源)的javaio對象就可以看作是一個InputStream對象既然它能產生出資料,我們就可以將資料取出,java對封裝的通用方法就read()方法了--(出水龍頭)。
3、任何有能力接收資料來源(流)的javaio對象我們就可以看作是一個OutputStream對象
同樣,它能接收資料,我們就可以調用它的write方法,來讓它接收資料--(進水龍頭了,呵呵)
4、當然,我們可以在Inputstream和OutputStream資料來源的基礎上,從實際需要觸發,
來重新封裝出不同效能機制的輸入、輸出資料流了,java.io包中提供了很豐富的輸入、輸出資料流對象,如:
基於位元組流的stream:
DataOutputStream----DataInputStream:
FileOutputStream-----FileInputStream:
.............等,可以用InputStream和OutputStream從JDK文檔查閱
基於字元流的stream(典型的以write和reader來標識的):
FileWriter---FileReader:
StringWriter---StringReader:
.........等,你自己可以用Writer和Reader從JDK文檔裡頭查看說明
stream應該是水龍頭裡的水資源,
InputStream:是一個出水龍頭(把水封裝在裡頭)的一個實物對象,該對象的read方法呢,就想成這個
出水龍頭這一機制對象的開關鈕,你read或openStream(其他對象包容InputStream對象的對象方法)一下呢,就等於開啟了出水龍頭的按鈕,水就出來了,裡頭封裝的水是什麼性質的呢,你就用相應的容器來裝,如string或byte[].....
OutputStream:你就在InputStream基礎上反著想就ok了
-------------------------------------------------------------------------------------------------------------------------
OutputStream
(1)輸出資料
void write(int b)往流中寫一個位元組b
void write(byte b[])往流中寫一個位元組數組b
void write(byte b[],int off,int len)把位元組數組b中從下標off開始,長度為len的位元組寫入流中
(2)
flush()刷空輸出資料流,並輸出所有被緩衝的位元組
由於某些流支援緩衝功能,該方法將把緩衝中所有內容強制輸出到流中。
(3)關閉流
close()流操作完畢後必須關閉。
------------------------------------------------------------------------------------------------------------------------
InputStream
(1)從流中讀取資料
int read() 讀取一個位元組,傳回值為所讀得位元組
int read(byte b[]) 讀取多個位元組,放置到位元組數組b中,通常讀取的位元組數量為b的長度,傳回值為實際獨取的
位元組的數量。
int read(byte b[] ,int off,int len)讀取len個位元組,放置到以下標off開始位元組數組b中,傳回值為實際
讀取的位元組的數量。
int available() 傳回值為流中尚未讀取的位元組的數量。
long skip(long n);讀指標跳過n個位元組不讀,傳回值為實際跳過的位元組數量
(2)關閉流
close() 流操作完畢後必須關閉
(3)使用輸入資料流中的標記
void mark(int readlimit)紀錄當前指標的所在位置.readlimit表示讀指標讀出的readlimit個位元組後
所標記的指標位置才實效。
void reset() 把讀指標重新指向用mark方法所記錄的位置
boolean markSupported() 當前的流是否支援讀指標的記錄功能。
-----------------------------------------------------------------------------------------------------------------------
Java IO通過Stream(流)來實現。關於流,可以理解為是一種“資料的管道”。管道中流動的東西可以是基於位元組,也可以是基於字元的等。就好像管道裡面可以流動水,也可以流動石油一樣。
而對應於流還有一個概念:輸入、輸出裝置。這些裝置可以是磁碟檔案、鍵盤(輸入裝置)、顯示器(輸出裝置)、印表機(輸出裝置)、網路通訊端等等。
下面,我們就來瞭解“流”。
Java中定義了兩種類型的流:位元組型,和字元型。
位元組流:處理位元組的輸入和輸出。包括讀寫位元據等方面的內容。
字元流:處理字元的輸入和輸出。他採用的是Unicode編碼,可以實現國際化。使用字元流的另外一個好處就是:字元流比位元組流更有效率。
位元組流:
位元組流包含兩個頂層抽象類別:InputStream和OutputStream。
1:位元組流的兩個頂層類是抽象類別,分別是:InputStream和OutputStream。
2:每個抽象類別都有子類來實現具體的功能,處理不同的裝置的輸入和輸 出。
下面簡單介紹位元組流的幾個常用子類:::
位元組流類 |
功能簡單介紹 |
DataInputStream |
包含了讀取Java標準資料類型的輸入資料流 |
DataOutputStream |
包含了寫Java標準資料類型的輸出資料流 |
ByteArrayInputStream |
從位元組數組讀取的輸入資料流 |
ByteArrayOutputStream |
寫入位元組數組的輸出資料流 |
FileInputStream |
從檔案讀入的輸入資料流 |
FileOutputStream |
寫入檔案的輸出資料流 |
PrintStream |
包含最常見的Print()和Println()的輸出資料流 |
PushbackInputStream |
返回一個位元組到輸入資料流,主要用於編譯器的實現 |
PipedInputStream |
輸出管道 |
PipedOutputStream |
輸入管道 |
SequenceInputStream |
將n個輸入資料流聯合起來,一個接一個按一定順序讀取 |
RandomAccessFile |
隨機訪問檔案 |
BufferInputStream |
緩衝輸入資料流 |
BufferOutputStream |
緩衝輸出資料流 |
FilterInputStream |
實現了InputStream Interface |
FilterOutputStream |
實現了OutputStream Interface |
InputStream |
抽象類別,描述流的輸入 |
OutputStream |
抽象類別,描述流的輸入 |
抽象類別InputStream和OutpurStream定義了實用的方法,其中最主要的是read()和
write()。這兩個方法在InputStream和OutputStream中聲明為抽象方法,由子流類overwrite實現。
2:每個抽象類別都有子類來實現具體的功能,處理不同的裝置的輸入和輸 出。
下面簡單介紹位元組流的幾個常用子類:::
位元組流類 |
功能簡單介紹 |
DataInputStream |
包含了讀取Java標準資料類型的輸入資料流 |
DataOutputStream |
包含了寫Java標準資料類型的輸出資料流 |
ByteArrayInputStream |
從位元組數組讀取的輸入資料流 |
ByteArrayOutputStream |
寫入位元組數組的輸出資料流 |
FileInputStream |
從檔案讀入的輸入資料流 |
FileOutputStream |
寫入檔案的輸出資料流 |
PrintStream |
包含最常見的Print()和Println()的輸出資料流 |
PushbackInputStream |
返回一個位元組到輸入資料流,主要用於編譯器的實現 |
PipedInputStream |
輸出管道 |
PipedOutputStream |
輸入管道 |
SequenceInputStream |
將n個輸入資料流聯合起來,一個接一個按一定順序讀取 |
RandomAccessFile |
隨機訪問檔案 |
BufferInputStream |
緩衝輸入資料流 |
BufferOutputStream |
緩衝輸出資料流 |
FilterInputStream |
實現了InputStream Interface |
FilterOutputStream |
實現了OutputStream Interface |
InputStream |
抽象類別,描述流的輸入 |
OutputStream |
抽象類別,描述流的輸入 |
抽象類別InputStream和OutpurStream定義了實用的方法,其中最主要的是read()和
write()。這兩個方法在InputStream和OutputStream中聲明為抽象方法,由子流類overwrite實現。
java的InputStream和OutputStream的理解