記錄():一個單獨的數據實例。
域():一個屬性。
20.3 輸入和輸出設備:P484
輸入過程和輸出過程。
操作系統負責建立三個流(stream):標準輸入流(System.in)、標準輸出流(System.out)、標準錯誤流(System.error)。
輸入類:
* InputStream:提供了許多處理基本輸入的底層方法,主要處理字節序列。
* InputStreamReader:提供了更高層的處理方法,主要處理字符序列。
* BufferedReader:主要處理字符串形式的輸入數據。
20.4 文件操作:P485
讀(reading):輸入過程是將數據從文件傳送到存儲器。
寫(writing):輸出過程是將數據從存儲器傳送到文件。
操作單位:字節、字符、字符串、文本行、基本數據類型、對象。
20.4.1 編碼:文本、二進制、對象。P486
20.4.2 訪問:順序訪問、隨機訪問。P486
20.5 讀寫文本文件:P491
FileWriter:文件輸出,兩種模式(輸出模式、添加模式),底層方法。
PrintWriter:像輸出到屏幕上一樣,可以設置輸出的格式,高層方法。
注:在將信息寫入文件后,最重要的一步操作是關閉文件。
關閉文件的兩個目的:保證將一個特殊的字符--文件結束符--寫入文件的末尾。關閉文件意味著程序不能再訪問該文件,防止出現錯誤的寫入操作。
FileReader:以只讀方式打開,底層方法。
BufferedReader:依次讀取每個記錄的每個域,高層方法。
20.6 讀寫二進制文件:P495
底層方法:FileOutputStream、FileInputStream
高層方法:DataOutputStream、DataInputStream
20.7 以字符為單位讀取文本文件:P498
BufferedReader.read():從文件中讀取一個字符。
20.8 對象序列化(Serialization):P499
將一個對象轉化為適合磁盤存儲的數據流的過程稱為序列化(serialization)。
如果需要將對象序列化必須實現Serializable接口,這個接口不含有任何方法,被稱為marker。
它的作用僅是提醒使用該類的用戶:即該類的任何對象都可以以整個對象為單位讀出或寫入。
20.9 隨機訪問文件:P502
RandomAccessFile.seek():從開始讀或寫操作前將文件指針移動的字節數。
注:打開文件的模式(只讀模式、讀寫模式)。
自測題:
1. 輸入輸出的原理:P484
輸入過程是將數據從某個外部設備傳送到內存;
輸出過程是將數據從主存傳送到某個外部設備。
為了實現輸入和輸出操作,必須在設備和計算機存儲器之間建立一個通信管道。這樣的管道稱為流(stream)。
2. 輸入流和輸出流:P484
操作系統負責建立一個標準輸入流(standard input stream)和標準輸出流(standard output stream),以及一個標準錯誤流(stand error stream)用于顯示錯誤信息。
3. 文本編碼、二進制編碼和對象編碼的區別:P486
文本編碼格式:存儲在磁盤上的數據以字符的形式被外部系統使用--通常是ASCII碼。
二進制編碼格式:數據的存儲格式與程序使用的數據的內部表示相同,即按照數據在存儲器中的存儲格式。
對象編碼格式:數據是按照一個具體的完整的對象的方式來存取操作的。
4. 順序訪問文件和隨機訪問文件的區別:P486
順序訪問文件:依次讀出(寫入)每個數據元素。操作系統提供文件指針(file pointer),表示存儲器中的一個位置,用于記錄讀寫文件中到達的位置。
隨機訪問文件:直接到達需要的記錄位置。
5. Serializable接口的作用:P499
將一個對象轉化為適合磁盤存儲的數據流的過程稱為序列化(serialization)。
如果需要將對象序列化必須實現Serializable接口,這個接口不含有任何方法,被稱為marker。
它的作用僅是提醒使用該類的用戶:即該類的任何對象都可以以整個對象為單位讀出或寫入。
6. 對象占用的字節數=4+2+(20+2)=28
private int x;
private char c;
private String s;
編程練習:代碼附件
1. BinaryFileTester.java
2. FileHandler.java RunFileHandler.java
3. RandomFileTester.java
4. ObjectFileTester.java
5. 先挖坑。。。