輸入與輸出流
在Java中,信息的輸入和輸出(I/O)是程序設計語言中的一個很重要的部分。在任何程序中都離不開信息的輸入和輸出。在面向對象語言中,輸入和輸出都是通過數據流來實現的。處理數據流的類主要被放在包java.io中。因為前面已經講過I/O流的基本知識,所以下面只是對之前只是的鞏固和補充。
1、數據流的劃分
按照處理數據的單位劃分,Java定義了兩種類型的數據流:字節流和字符流。字節流是用來處理字節的輸入和輸出的,各種數據都可以用字節來表示,包括數字數據、程序和字節碼等。字符流是用來處理字符的輸入和輸出的,它只處理文本化的數據,任何涉及文本的數據類型都應該使用字符流,包括文本文件、網頁以及其他的文本類型。
字節流類InputStream和OutputStream是兩個抽象類,InputStream包括了字節輸入流的所有方法,OutputStream包括了字符輸出流的所有方法。真正用來做數據輸入和輸出處理的是這兩個抽象類的各個具體的子類。這些子類可以針對不同的輸入和輸出進行處理。下面是輸入字節流與輸出字節流的表:
流
描 述
FileInputStream
文件字節輸入流
ByteArrayInputStream
字節數組輸入流
PipedInputStream
管道輸入流
BufferedInputStream
緩沖輸入流
FilterInputStream
過濾字節輸入流
ObjectInputStream
對象輸入流
DataInputStream
包含讀取Java標准數據類型方法的輸入流
流
描 述
FileOutputStream
文件字節輸出流
ByteArrayOutputStream
字節數組輸出流
PipedOutputStream
管道輸出流
BufferedOutputStream
緩沖輸出流
FilterOutputStream
過濾字節輸出流
ObjectOutputStream
對象輸出流
DataOutputStream
包含讀取Java標准數據類型方法的輸出流
PrintStream
包含print()和println()的輸出流
通過這些字節輸入流和字節輸出流類來創建數據流一遍完成數據的輸入和輸出。例如將影像、聲音等數據寫入文件和從文件裡讀取數據時,就要用到FileInputStream和FileOutputStream類。
字符流類Reader和Writer也是兩個抽象類。由於Java采用16位的Unicode字符編碼,所以這些抽象類處理的是Unicode的字符流。用來作數據輸入和輸出處理的是Reader和Writer的子類,這些子類可以針對不同的輸入和輸出進行處理。輸入和輸出字符流如下表所示:
輸入字符流
流
描 述
FileReader
文件字符輸入流
CharArrayReader
從字符數組讀取的輸入流
StringReader
讀取字符串的輸入流
PipedReader
管道字符輸入流
BufferedReader
緩沖輸入流
FilterReader
過濾字符輸入流
InputStreamReader
將字節輸入流轉換為字符輸入流
輸出字符流
流
描 述
FileWriter
文件字符輸出流
CharArrayWriter
從字符數組讀取的輸出流
StringWriter
讀取字符串的輸出流
PipedWriter
管道字符輸出流
BufferedWriter
緩沖輸出流
FilterWriter
過濾字符輸出流
OutputStreamWriter
將字節輸出流轉換為字符輸出流
PrintWriter
打印字符輸出流
上表中這些字符輸入流和字符輸出流都是抽象類Reader和Writer的子類,可以通過這些字符輸入流和字符輸出流來創建數據流以便完成數據的輸入和輸出。例如將”純文本”數據寫入文件和從文件裡讀取數據時,就要用到FileReader和FileWriter類。