(轉)java的InputStream和OutputStream的理解

一、在java中stream表明一種數據流(源),javaio的底層數據元,---(想像成水龍頭)
二、任何有能力產生數據流(源)的javaio對象就能夠看做是一個InputStream對象
既然它能產生出數據,咱們就能夠將數據取出,java對封裝的通用方法就read()方法了--(出水龍頭)
三、任何有能力接收數據源(流)的javaio對象咱們就能夠看做是一個OutputStream對象
一樣,它能接收數據,咱們就能夠調用它的write方法,來讓它接收數據--(進水龍頭了,呵呵)
四、固然,咱們能夠在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

Java IO經過Stream(流)來實現。關於流,能夠理解爲是一種「數據的管道」。管道中流動的東西能夠是基於字節,也能夠是基於字符的等。就好像管道里面能夠流動水,也能夠流動石油同樣。數組

而對應於流還有一個概念:輸入、輸出設備。這些設備能夠是磁盤文件、鍵盤(輸入設備)、顯示器(輸出設備)、打印機(輸出設備)、網絡套接字等等。緩存

下面,咱們就來了解「流」。網絡

Java中定義了兩種類型的流:字節型,和字符型。dom

字節流:處理字節的輸入和輸出。包括讀寫二進制數據等方面的內容。性能

字符流:處理字符的輸入和輸出。他採用的是Unicode編碼,能夠實現國際化。使用字符流的另一個好處就是:字符流比字節流更有效率。編碼

字節流:spa

字節流包含兩個頂層抽象類:InputStream和OutputStream。指針

1:字節流的兩個頂層類是抽象類,分別是:InputStream和OutputStream。code

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實現。

相關文章
相關標籤/搜索