1、在java中stream代表一種數(shù)據(jù)流(源),javaio的底層數(shù)據(jù)元,---(想像成水龍頭)
2、任何有能力產(chǎn)生數(shù)據(jù)流(源)的javaio對(duì)象就可以看作是一個(gè)InputStream對(duì)象
既然它能產(chǎn)生出數(shù)據(jù),我們就可以將數(shù)據(jù)取出,java對(duì)封裝的通用方法就read()方法了--(出水龍頭)
3、任何有能力接收數(shù)據(jù)源(流)的javaio對(duì)象我們就可以看作是一個(gè)OutputStream對(duì)象
同樣,它能接收數(shù)據(jù),我們就可以調(diào)用它的write方法,來(lái)讓它接收數(shù)據(jù)--(進(jìn)水龍頭了,呵呵)
4、當(dāng)然,我們可以在Inputstream和OutputStream數(shù)據(jù)源的基礎(chǔ)上,從實(shí)際需要觸發(fā),
來(lái)重新封裝出不同性能機(jī)制的輸入、輸出流了,java.io包中提供了很豐富的輸入、輸出流對(duì)象,如:
基于字節(jié)流的stream:
DataOutputStream----DataInputStream:
FileOutputStream-----FileInputStream:
.............等,可以用InputStream和OutputStream從JDK文檔查閱
基于字符流的stream(典型的以write和reader來(lái)標(biāo)識(shí)的):
FileWriter---FileReader:
StringWriter---StringReader:
.........等,你自己可以用Writer和Reader從JDK文檔里頭查看說(shuō)明
stream應(yīng)該是水龍頭里的水資源,
InputStream:是一個(gè)出水龍頭(把水封裝在里頭)的一個(gè)實(shí)物對(duì)象,該對(duì)象的read方法呢,就想成這個(gè)
出水龍頭這一機(jī)制對(duì)象的開(kāi)關(guān)鈕,你read或openStream(其他對(duì)象包容InputStream對(duì)象的對(duì)象方法)一下呢,就等于打開(kāi)了出水龍頭的按鈕,水就出來(lái)了,里頭封裝的水是什么性質(zhì)的呢,你就用相應(yīng)的容器來(lái)裝,如string或byte[].....
OutputStream:你就在InputStream基礎(chǔ)上反著想就ok了
-------------------------------------------------------------------------------------------------------------------------
OutputStream
(1)輸出數(shù)據(jù)
void write(int b)往流中寫(xiě)一個(gè)字節(jié)b
void write(byte b[])往流中寫(xiě)一個(gè)字節(jié)數(shù)組b
void write(byte b[],int off,int len)把字節(jié)數(shù)組b中從下標(biāo)off開(kāi)始,長(zhǎng)度為len的字節(jié)寫(xiě)入流中
(2)
flush()刷空輸出流,并輸出所有被緩存的字節(jié)
由于某些流支持緩存功能,該方法將把緩存中所有內(nèi)容強(qiáng)制輸出到流中。
(3)關(guān)閉流
close()流操作完畢后必須關(guān)閉。
------------------------------------------------------------------------------------------------------------------------
InputStream
(1)從流中讀取數(shù)據(jù)
int read() 讀取一個(gè)字節(jié),返回值為所讀得字節(jié)
int read(byte b[]) 讀取多個(gè)字節(jié),放置到字節(jié)數(shù)組b中,通常讀取的字節(jié)數(shù)量為b的長(zhǎng)度,返回值為實(shí)際獨(dú)取的
字節(jié)的數(shù)量。
int read(byte b[] ,int off,int len)讀取len個(gè)字節(jié),放置到以下標(biāo)off開(kāi)始字節(jié)數(shù)組b中,返回值為實(shí)際
讀取的字節(jié)的數(shù)量。
int available() 返回值為流中尚未讀取的字節(jié)的數(shù)量。
long skip(long n);讀指針跳過(guò)n個(gè)字節(jié)不讀,返回值為實(shí)際跳過(guò)的字節(jié)數(shù)量
(2)關(guān)閉流
close() 流操作完畢后必須關(guān)閉
(3)使用輸入流中的標(biāo)記
void mark(int readlimit)紀(jì)錄當(dāng)前指針的所在位置.readlimit表示讀指針讀出的readlimit個(gè)字節(jié)后
所標(biāo)記的指針位置才實(shí)效。
void reset() 把讀指針重新指向用mark方法所記錄的位置
boolean markSupported() 當(dāng)前的流是否支持讀指針的記錄功能。
-----------------------------------------------------------------------------------------------------------------------
Java IO 通過(guò) Stream (流)來(lái)實(shí)現(xiàn) 。關(guān)于流,可以理解為是一種“數(shù)據(jù)的管道”。管道中流動(dòng)的東西可以是基于字節(jié),也可以是基于字符的等。就好像管道里面可以流動(dòng)水,也可以流動(dòng)石油一樣。
而對(duì)應(yīng)于流還有一個(gè)概念:輸入、輸出設(shè)備。這些設(shè)備可以是磁盤(pán)文件、鍵盤(pán)(輸入設(shè)備)、顯示器(輸出設(shè)備)、打印機(jī)(輸出設(shè)備)、網(wǎng)絡(luò)套接字等等。
下面,我們就來(lái)了解“流”。
Java 中定義了兩種類型的流:字節(jié)型,和字符型。
字節(jié)流:處理字節(jié)的輸入和輸出。包括讀寫(xiě)二進(jìn)制數(shù)據(jù)等方面的內(nèi)容。
字符流:處理字符的輸入和輸出。他采用的是 Unicode 編碼,可以實(shí)現(xiàn)國(guó)際化。使用字符流的另外一個(gè)好處就是:字符流比字節(jié)流更有效率。
字節(jié)流:
字節(jié)流包含兩個(gè)頂層抽象類: InputStream 和 OutputStream 。
1 :字節(jié)流的兩個(gè)頂層類是抽象類,分別是: InputStream 和 OutputStream 。
2 :每個(gè)抽象類都有子類來(lái)實(shí)現(xiàn)具體的功能,處理不同的設(shè)備的輸入和輸 出。
下面簡(jiǎn)單介紹字節(jié)流的幾個(gè)常用子類:::
字節(jié)流類 |
功能簡(jiǎn)單介紹 |
DataInputStream |
包含了讀取 Java 標(biāo)準(zhǔn)數(shù)據(jù)類型的輸入流 |
DataOutputStream |
包含了寫(xiě) Java 標(biāo)準(zhǔn)數(shù)據(jù)類型的輸出流 |
ByteArrayInputStream |
從字節(jié)數(shù)組讀取的輸入流 |
ByteArrayOutputStream |
寫(xiě)入字節(jié)數(shù)組的輸出流 |
FileInputStream |
從文件讀入的輸入流 |
FileOutputStream |
寫(xiě)入文件的輸出流 |
PrintStream |
包含最常見(jiàn)的 Print ()和 Println ()的輸出流 |
PushbackInputStream |
返回一個(gè)字節(jié)到輸入流,主要用于編譯器的實(shí)現(xiàn) |
PipedInputStream |
輸出管道 |
PipedOutputStream |
輸入管道 |
SequenceInputStream |
將 n 個(gè)輸入流聯(lián)合起來(lái),一個(gè)接一個(gè)按一定順序讀取 |
RandomAccessFile |
隨機(jī)訪問(wèn)文件 |
BufferInputStream |
緩沖輸入流 |
BufferOutputStream |
緩沖輸出流 |
FilterInputStream |
實(shí)現(xiàn)了 InputStream Interface |
FilterOutputStream |
實(shí)現(xiàn)了 OutputStream Interface |
InputStream |
抽象類,描述流的輸入 |
OutputStream |
抽象類,描述流的輸入 |
抽象類 InputStream 和 OutpurStream 定義了實(shí)用的方法,其中最主要的是 read ()和
write ()。這兩個(gè)方法在 InputStream 和 OutputStream 中聲明為抽象方法,由子流類 overwrite 實(shí)現(xiàn)。
2 :每個(gè)抽象類都有子類來(lái)實(shí)現(xiàn)具體的功能,處理不同的設(shè)備的輸入和輸 出。
下面簡(jiǎn)單介紹字節(jié)流的幾個(gè)常用子類:::
字節(jié)流類 |
功能簡(jiǎn)單介紹 |
DataInputStream |
包含了讀取 Java 標(biāo)準(zhǔn)數(shù)據(jù)類型的輸入流 |
DataOutputStream |
包含了寫(xiě) Java 標(biāo)準(zhǔn)數(shù)據(jù)類型的輸出流 |
ByteArrayInputStream |
從字節(jié)數(shù)組讀取的輸入流 |
ByteArrayOutputStream |
寫(xiě)入字節(jié)數(shù)組的輸出流 |
FileInputStream |
從文件讀入的輸入流 |
FileOutputStream |
寫(xiě)入文件的輸出流 |
PrintStream |
包含最常見(jiàn)的 Print ()和 Println ()的輸出流 |
PushbackInputStream |
返回一個(gè)字節(jié)到輸入流,主要用于編譯器的實(shí)現(xiàn) |
PipedInputStream |
輸出管道 |
PipedOutputStream |
輸入管道 |
SequenceInputStream |
將 n 個(gè)輸入流聯(lián)合起來(lái),一個(gè)接一個(gè)按一定順序讀取 |
RandomAccessFile |
隨機(jī)訪問(wèn)文件 |
BufferInputStream |
緩沖輸入流 |
BufferOutputStream |
緩沖輸出流 |
FilterInputStream |
實(shí)現(xiàn)了 InputStream Interface |
FilterOutputStream |
實(shí)現(xiàn)了 OutputStream Interface |
InputStream |
抽象類,描述流的輸入 |
OutputStream |
抽象類,描述流的輸入 |
抽象類 InputStream 和 OutpurStream 定義了實(shí)用的方法,其中最主要的是 read ()和
write ()。這兩個(gè)方法在 InputStream 和 OutputStream 中聲明為抽象方法,由子流類 overwrite 實(shí)現(xiàn)。