數據流的概念
在 Java 中,把所有的輸入和輸出都當做流來處理。 “ 流 ” 是一個抽象概念,它代表任何有能力產出數據的數據源對象或者是有能力接收數據的接收端對象。 “ 流 ” 屏蔽了實際的輸入 / 輸出設備中處理數據的細節。一個程序可以打開一個數據源上的流,然后按順序讀取這個流中的數據到程序中,這樣的流稱為輸入流,其過程如圖所示。一個程序也可以打開一個目的地的流,然后按順序的把程序中的數據寫入到這個目地中,這樣的流稱為輸出流。
加深理解:輸入輸出是相對程序而言的。
流的分類
兩種分法:
1.Java 的輸入 / 輸出流中,根據它們的數據類型,主要可分為兩類:字符流 (Character Stream) 和字節流 (Btye Stream) 。
字符流 (character Stream) 字符流的輸入 / 輸出數據是字符碼, 即 Unicode 字符。
字符流有兩個基本類: Reader 類和 Writer 類。 Reader 類用於處理字符輸入流, Writer 類用於處理字符輸出流。 它們都是抽象類,本身不能直接用來創建對象。提供了一些方法。
字節流 (Btye Stream) 字節流是按字節讀 / 寫二進制數據。
字節流有兩個基本的類: InputStream 類和 OutputStream 類。 InputStream類用於處理字節輸入流, OutputStream 類用於處理字節輸出流。它們都是抽象類,本身不能直接用來創建對象。InputStream 類和 OutputStream 類為其它字節輸入 / 輸出流子類提供了一些基本方法和標准接口。
2.按照流是否直接與特定的地方(如磁盤、內存等)相連,分為節點流與處理流。
節點流:可以從或者向一個特定的地方(節點)讀寫數據。如文件流 FileReader 。
處理流:是對一個已經存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀、寫功能。處理流也稱過濾流,如緩沖處理流BufferedReader 。
字節流和字符流比較
1、字節流在操作的時候本身是不會用到緩沖區的,是文件本身的直接操作的,但是字符流在操作的 時候下后是會用到緩沖區的,是通過緩沖區來操作文件的。
2、使用字節流好還是字符流好呢?
字節流。首先因為硬盤上的所有文件都是以字節的形式進行傳輸或者保存的,包括圖片等內容。但是字符只是在內存中才會形成的,所以在開發中,字節流使用廣泛。
字節和字符轉換流
整個IO類中除了字節流和字符流外,還包括字節和字符轉換流。
OutputStreramWriter將輸出的字符流轉化為字節流;InputStreamReader將輸入的字節流轉換為字符流。但是不管如何操作,最后都是以字節的形式保存在文件中的。