編輯:關於android開發
Java的I/O系統中的輸入輸出流為我們進行開發提供了很多便利,利用其強大的封裝性,通過各種組合能夠實現多種多樣的功能。但是Java提供了很多輸入輸出流類,在概念和使用上有很多相似之處,所以給很多開發者帶來了困擾,何時應該用何種輸入輸出流類成為一個問題。
以下即是Java輸入輸出流類的介紹,並附有實例說明,對各個類的用法都有簡要分析。
輸入輸出流類介紹
1.stream代表的是任何有能力產出數據的數據源,或是任何有能力接收數據的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括兩種類型: 以字節為導向的stream和以Unicode字符為導向的stream。
1.1 以字節為導向的stream
以字節為導向的stream,表示以字節為單位從stream中讀取或往stream中寫入信息。以字節為導向的stream包括下面幾種類型:
input stream:
1) ByteArrayInputStream:把內存中的一個緩沖區作為InputStream使用
2) StringBufferInputStream:把一個String對象作為InputStream
3) FileInputStream:把一個文件作為InputStream,實現對文件的讀取操作
4) PipedInputStream:實現了pipe的概念,主要在線程中使用
5) SequenceInputStream:把多個InputStream合並為一個InputStream
Out stream:
1) ByteArrayOutputStream:把信息存入內存中的一個緩沖區中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:實現了pipe的概念,主要在線程中使用
4) SequenceOutputStream:把多個OutStream合並為一個OutStream
1.2 以Unicode字符為導向的stream
以Unicode字符為導向的stream,表示以Unicode字符為單位從stream中讀取或往stream中寫入信息。以Unicode字符為導向的stream包括下面幾種類型:
Input Stream:
1) CharArrayReader:與ByteArrayInputStream對應
2) StringReader:與StringBufferInputStream對應
3) FileReader:與FileInputStream對應
4) PipedReader:與PipedInputStream對應
Out Stream:
1) CharArrayWrite:與ByteArrayOutputStream對應
2) StringWrite:無與之對應的以字節為導向的stream
3) FileWrite:與FileOutputStream對應
4) PipedWrite:與PipedOutputStream對應
以字符為導向的stream基本上對有與之相對應的以字節為導向的stream。兩個對應類實現的功能相同,字是在操作時的導向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把內存中的一個緩沖區作為InputStream使用,所不同的是前者每次從內存中讀取一個字節的信息,而後者每次從內存中讀取一個字符。
1.3 兩種不現導向的stream之間的轉換
InputStreamReader和OutputStreamReader:把一個以字節為導向的stream轉換成一個以字符為導向的stream。
2.為stream添加屬性
2.1 "為stream添加屬性”的作用
運用上面介紹的Java中操作IO的API,我們就可完成我們想完成的任何操作了。但通過FilterInputStream和FilterOutStream的子類,我們可以為stream添加屬性。下面以一個例子來說明這種功能的作用。 如果我們要往一個文件中寫入數據,我們可以這樣操作:
FileOutStream fs = new FileOutStream(“test.txt”);
然後就可以通過產生的fs對象調用write()函數來往test.txt文件中寫入數據了。但是,如果我們想實現“先把要寫入文件的數據先緩存到內存中,再把緩存中的數據寫入文件中”的功能時,上面的API就沒有一個能滿足我們的需求了。但是通過FilterInputStream和FilterOutStream的子類,為FileOutStream添加我們所需要的功能。
2.2 FilterInputStream的各種類型
2.2.1 用於封裝以字節為導向的InputStream
1) DataInputStream:從stream中讀取基本類型(int、char等)數據。
2) BufferedInputStream:使用緩沖區
3) LineNumberInputStream:會記錄input stream內的行數,然後可以調用getLineNumber()和setLineNumber(int)
4) PushbackInputStream:很少用到,一般用於編譯器開發
2.2.2 用於封裝以字符為導向的InputStream
1) 沒有與DataInputStream對應的類。除非在要使用readLine()時改用BufferedReader,否則使用DataInputStream
2) BufferedReader:與BufferedInputStream對應
3) LineNumberReader:與LineNumberInputStream對應
4) PushBackReader:與PushbackInputStream對應
2.3 FilterOutStream的各種類型
2.2.3 用於封裝以字節為導向的OutputStream
1) DataOutputStream:往stream中輸出基本類型(int、char等)數據。
2) BufferedOutStream:使用緩沖區
3) PrintStream:產生格式化輸出
2.2.4 用於封裝以字符為導向的OutputStream
1) BufferedWrite:與BufferedOutStream對應
2) PrintWrite:與PrintStream對應
3. RandomAccessFile
1) 可通過RandomAccessFile對象完成對文件的讀寫操作
2) 在產生一個對象時,可指明要打開的文件的性質:r,只讀;w,只寫;rw可讀寫
3) 可以直接跳到文件中指定的位置
輸入輸出流應用實例
下面在main函數中給出6個代碼段,說明各個輸入輸出流類的使用方法,並在代碼段後有相應注釋說明。
Java代碼看了以上詳解說明,是不是對Java輸入輸出流類的概念有了更清晰的認識,對它們的使用也更得心應手了呢?
Android安全攻防戰,反編譯與混淆技術完全解析(下) 在上一篇文章當中,我們學習了Android程序反編譯方面的知識,包括反編譯代碼、反編譯資源、以及重新打包等內
Android 解讀.apk解壓後文件詳細說明,android.apk反編譯 — 在apk文件中能得到什麼 最近在做android客戶端與服務器安全通信,有一
android:ScrollView監視什麼時候滑到底部 這是效果 主要是onTouchListener監聽事件,監視什麼時候滑到底部 同時要理解getMeasur
安卓開源項目周報0208,安卓開源項目0208 由OpenDigg 出品的安卓開源項目周報第七期來啦。我們的安卓開源周報集合了OpenDigg一周來