天天看點

Java第七章網課筆記

第七章 流

目錄

第七章 流 1

7.1流的概念 2

1.流的概念 2

2.流的功能 2

3.關于流的注意問題 2

7.2 Java IO流分類 2

總分類 2

節點流和處理流 2

1.Java流支援的兩種類型的資料 2

2.按照讀寫資料的類型 2

3.InputStream 2

4.OutputStream 2

5.Reader 2

6.Writer 2

7.3節點流 2

7.3.1.節點流的分類 3

7.3.2檔案節點流 3

1.功能 3

2.執行個體 3

7.4 過濾流(處理流) 5

7.4.1工作原理 5

1.工作過程 5

2.Java的處理方法 6

7.4.2 緩沖流 7

1.定義 7

2.作用: 7

3.主要類: 7

4.具體實作 8

7.4.3 轉換流 8

1.功能 8

2.InputStreamReader&OutputStreamWriter 8

3.具體實作 9

7.4.4 資料流 9

1.作用: 9

2.主要接口和類 9

3.構造方法: 9

7.4.5 Print流 9

7.4.6 對象流 9

7.4.7總結 9

1.處理流的功能主要展現在 9

2.關閉流時的注意點 9

7.1流的概念

之前所學的Java程式所有的資料都是儲存在記憶體/JVM中,程式結束之後自動釋放,現在的大多數都是程式結束之後儲存到磁盤當中去,啟動程式會在當中讀出相關資料,相關操作就是通過流來實作的

【從程式的角度看】

流讀取資料:輸入流(可從中讀出一系列位元組的對象)

流寫入資料:輸出流(可向其中寫入一系列位元組的對象)

在Java中流也是對象

1.流的概念

來自源或送至目的地的資料流動,程式和I/O裝置或檔案之間進行傳輸的對象

2.流的功能

完成資料的輸入和輸出

3.關于流的注意問題

(1)Java中所有的輸入、輸出,都是通過流來完成的

(2)一個流是以另一個對象為源或目的傳輸資訊的對象,功能類似與一個管道

(3)執行個體:System.out

System.in

7.2 Java IO流分類

總分類

節點流和處理流

節點流:可以從一個特定的資料源讀取資料(直接從資料源讀取資料,讀回來的資料是類似01010)

處理流:連接配接已存在的流(節點流或處理流)之上,通過對已有流的處理為程式提高更強大的讀寫能力<讀寫01010等資訊,使其簡化>

1.Java流支援的兩種類型的資料

①原始位元組

②Unicode字元(會有轉換過程)

2.按照讀寫資料的類型

①位元組流(流)

②字元流(讀的流:閱讀器、輸出流:書寫器)

四個基本類(抽象類):

(Stream結尾是位元組流)

3.InputStream【輸入位元組流類】

(1)所有以位元組為機關的輸入流的基類

(2)操作的資料的基本機關:位元組(8bit)

(3)分類

(4)基本方法

①一次讀一個位元組回來

4.OutputStream【位元組輸出流】

(1)所有以位元組為機關輸出流的基類

(2)操作的資料的基本機關:位元組(8bit)

(3)分類

(4)基本方法

(5)說明

—flush将清空緩存,即将緩存的資料寫到檔案裡

—close是關閉檔案

—使某個流類提供了使用原生的read和write來工作的具體方法

5.Reader【字元輸入流】

(1)所有字元輸入流的基類

(2)操作的資料的基本機關:字元(16bit)

(3)分類

(4)基本方法

6.Writer【字元輸入流】

(1)所有字元輸入流的基類

(2)操作的資料的基本機關:字元(16bit)

(3)分類

(4)基本方法

7.Java流體系常用類的分類

7.3節點流

7.3.1.節點流的分類

節點流:直接從特定類型資料(資料源)實作讀寫的流

7.3.2檔案節點流

1.功能

連接配接檔案的輸入(輸出)流

2.執行個體

(1)Test File Input Stream

★功能:

從檔案中讀取位元組

★問題

①為何列印“?”,如何修改?

Java原檔案也是字元編碼的,要讀成位元組編碼的話一般隻會一次讀取一個位元組,如果不是一個位元組表示的字元,那就會亂碼 , <一個中文兩個位元組>

Java檔案時純文字檔案,使用字元流讀取就不會亂碼(字元流讀的也是位元組,隻是會自動将位元組轉化成字元,是以使用字元流讀取的時候就不會亂碼了)

②read()的傳回值為int

③總共讀取的位元組數(num)與檔案大小的關系?

相等

④異常處理

(2)Test File Reader

—功能:

列印出一個檔案中全部的字元(Unicode編碼)

(3)TestFileOutputStream

—File Output Stream對象建立時,若檔案不在,則會自動建立相應的檔案

(4)Test File Stream ToCopyMp3

功能

實作了mp3檔案的拷貝

問題:

①為何執行速度很慢?如何改進?

(5)TestFileWriter

功能

像另外一個檔案輸入大部分Unicode編碼

很多都是亂碼的原因:

FileWrite和FileRead都是隻能以系統預設的編碼格式讀寫檔案

7.4 過濾流(處理流)

7.4.1工作原理

1.工作過程

//位元組級的讀寫操作,沒有讀取數值類型資料的功能

FileInputStream fin=new FileInputStream(“a.txt”);

int b=fin.read;

//無法從檔案中讀取資料

DataInputStream din=…;

double s=din.readDouble();

2.Java的處理方法

(1)某些流從檔案或其他位置讀寫位元組;

某些流将位元組“組裝”成更有用的資料

(2)通過組成一個現成的流傳遞給另外一個流的構造器,形成“過濾流”

■說明:注意順序

—DataInputStream放到最後,是為了使用該類的方法;

—使用具有緩沖功能的read方法。

■優點: (1)隻要使用相同的處理流,程式則可以采用完全相同的輸入、輸出代碼來通路不同的資料源。

(2)提供了更加友善的操作,執行的效率更高;

(3)與節點流的搭配:各盡其職,擁有對流進行混合和比對的能力。

7.4.2 緩沖流

1.定義

套接在相應的節點流之上,對資料的讀寫提供了緩沖功能。.

2.作用:

提高了讀寫的效率。

3.主要類:

一BufferedInputStream

一BufferedOutputStream

一BufferedReader

一BufferedWriter

4.具體實作

執行個體1: Test BufferedInputStream

套接使用,需要參數,

雖然提供了緩沖功能,但是還是不可

以讀取中文

執行個體2: TestBufferReader

執行個體3: 拷貝MP3檔案:

CopyMp3WithBufferedStream

7.4.3 轉換流

1.功能

将位元組流轉換為字元流。

2.InputStreamReader&OutputStreamWriter

①InputStreamReader 需要與InputStream套接;

②OutputStreamWriter要與OutputStream套接。

③構造時可以指定編碼集合:

new InputStreamReader(System.in,“ISO8859_ 1”);

3.具體實作

(1)執行個體1: TestTransform

➢功能:讀取文本檔案(可正确讀取中文)

➢注意:讀取的字元總數。

(2)執行個體2: TestTransFormEncoding

(3)執行個體3:KeyboardInput

7.4.4 資料流

1.作用:

直接以基本類型為單元進行讀寫,提供了可以存取Java基本類型資料的方法。

2.主要接口和類

—接口: DataInput 、DataOutput

一實作類: DataInputStream、 DataOutputStream

3.構造方法:

一DataInputStream(InputStream in)

一DataOutputStream(OutputStream out )

例1: TestDataStream

7.4.5 Print流

7.4.6 對象流

7.4.7總結

1.處理流的功能主要展現在

(1) 性能的提高:主要以增加緩沖的方式來提高輸入輸出的效率;

(2) 操作的簡便:處理流提供了一系列便捷的方法來一次輸入、輸出大批量的内容,而不是輸入輸出一一個或多個位元組或字元。

2.關閉流時的注意點

使用處理流包裝了底層節點流後,關閉流時,隻要關閉最.上層的處理流,則被處理流包裝的節點流被自動關閉。