1. 程式人生 > >java的InputStream和OutputStream的理解

java的InputStream和OutputStream的理解

and arch tro 子類 data 等等 描述 緩存 指針

註:參考鏈接: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編碼,可以實現國際化。使用字符流的另外一個好處就是:字符流比字節流更有效率。

字節流:

字節流包含兩個頂層抽象類:InputStreamOutputStream

1:字節流的兩個頂層類是抽象類,分別是:InputStreamOutputStream

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()。這兩個方法在InputStreamOutputStream中聲明為抽象方法,由子流類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()。這兩個方法在InputStreamOutputStream中聲明為抽象方法,由子流類overwrite實現。

java的InputStream和OutputStream的理解