I/O:程序與外部世界間的接口(文件,網絡,內存)
流的基本概念
流是一個抽象的概念。當Java程序需要從數據源讀取數據時或輸出數據到目的地時,會開啓一個到數據源的流。數據源(目的地)可以是文件,內存或者網絡等。
流分爲字節流和字符流。字節(byte)流需要用戶讀入後進行相應的編碼轉換,而字符(char)流讀取數據時會把數據按照JVM的默認編碼自動轉換成字符。
字節流:InputStream和OutputStream,字符流:Reader和Writer。
字節(byte)---》解碼--》字符(char) /0x880x660x55-->中國
字符(char)-->編碼-->字節(byte) /中國->/0x880x8608x5
字節流
輸入流中跟數據源直接接觸的類有:FileInputStream 和 ByteArrayInputStream,他們分別實現了從文件或者內存中的字節數組讀入數據到輸入流。
跟數據目的地直接接觸的類有:FileOutputStream 和 ByteArrayOutputStream,前者實現了把數據流寫入文件的功能,後者實現了一個輸出流,其中的數據被寫入一個 byte 數組。
其他的輸入流、輸出流處理類都是裝飾類(Decorator模式),下面對他們進行一下簡單介紹:BufferedInputStream: 提供了緩衝功能。
DataInputStream: 允許應用程序以與機器無關方式從底層輸入流中讀取基本 Java 數據類型。應用程序可以使用數據輸出流寫入稍後由數據輸入流讀取的數據。
BufferedOutputStream: 提供了緩衝功能的輸出流,在寫出完成之前要調用flush來保證數據的輸出。
DataOutputStream: 數據輸出流允許應用程序以適當方式將基本 Java 數據類型寫入輸出流中。然後,應用程序可以使用數據輸入流將數據讀入。
字符流
流中的其他方法
Writer或者OutputStream中的flush(): 刷新該流的緩衝,用於確保數據的輸出。
close(): 關閉流並釋放與之關聯的所有系統資源。