在Java程序中,對於數據的輸入/輸出操作以“流” (stream) 方式進行;J2SDK提供了各種各樣的“流”類,用以獲取不同種類的數據;程序中通過標准的方法輸入或輸出數據。
數據源data source. 提供原始數據的原始媒介。常見的:數據庫、文件、其他程序、內存、網絡連接、IO設備。
數據源就像水箱,流就像水管中流著的水流,程序就是我們最終的用戶。 流是一個抽象、動態的概念,是一連串連續動態的數據集合。
? 流的方向:
輸入流:數據源到程序(InputStream、Reader讀進來)
輸出流:程序到目的地(OutPutStream、Writer寫出去)
? 處理數據單元:
字節流:按照字節讀取數據(InputStream、OutputStream)
字符流:按照字符讀取數據(Reader、Writer)
? 功能不同:
節點流:可以直接從數據源或目的地讀寫數據。
處理流:不直接連接到數據源或目的地,是處理流的流。通過對其他流的處理提高程序的性能。
? 節點流和處理流的關系:
節點流處於io操作的第一線,所有操作必須通過他們進行;處理流可以對其他流進行處理(提高效率或操作靈活性)。
? ByteArrayInutStream和ByteArrayOutputStream
? 數據源或目的地為:字節數組
?BufferedInputStream和BufferedOutputStream是處理流,通過內部緩存數組來提高操作流的效率。
? DataInputStream和DataOutputStream提供了可以存取所有Java基礎類型數據(如:int,double 等)的方法。
demo
package com.bjsxt.wsl; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public class HelloIn { public static void main(String[] args) throws IOException { //獲取文件路徑 InputStream inputStream = new FileInputStream("D:\\hello.txt"); //一般所使用的方式 StringBuilder builder = new StringBuilder(); byte[] bs = new byte[1024]; int num = 0; //開始讀取數據 while ((num = inputStream.read(bs)) != -1) { builder.append(new String(bs)); } System.out.println(builder); }
? Reader:
用於讀取字符流的抽象類,數據單位為字符。
? Writer:
寫入字符流的抽象類。
? BufferReader和BufferWriter
讀取文本一般使用這一對!
對象的序列化和反序列化:
ObjectInputStream和ObjectOutputStream,數據源或目的地是:對象!
打印流:
PrintWriter和PrintStream的輸出操作不會拋出異常,用戶通過檢測錯誤狀態獲取錯誤信息。
System.out 就是打印流
InputStreamReader和OutputStreamWrite為處理流:用於將字節流轉化成字符流。
文件和目錄路徑名的抽象表示形式。一個File對象可以代表一個文件或目錄,但是不是完全對應的。建立File對象不會對文件系統產生影響。
IO流技術的使用,使得我們的工作更為順暢,無論是從物理存儲的角度來看待,還是從邏輯思維中來理解,都變得很容易接受。
這裡只是簡單地介紹了IO流技術的一部分,很多細節需要到項目中去實踐,才能夠不斷地有新的認識。
由於要經常考慮到異常問題的出現,對於問題的考慮也會比較全面,對於增強我們的業務能力有很大提升呢!