java的InputStream和OutputStream的理解

來源:互聯網
上載者:User

標籤:數組   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編碼,可以實現國際化。使用字元流的另外一個好處就是:字元流比位元組流更有效率。

位元組流:

位元組流包含兩個頂層抽象類別: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的理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.