io複習

操作對象:

         通過流,將對象保存到硬盤上

ObjectOutputStream

構造函數中接收流

通過方法writeObject(Object obj)操作對象

被操作的對象需要實現Serializable接口,使對象序列化,標識對象


需要注意:static修飾的屬性不能被序列化

如果希望非靜態屬性也不被序列化,則在屬性前面加上trasient修飾

 

管道流:(涉及到多線程)

         PipedInputStream和PipedOutputStream

         輸入輸出可以直接進行連接

         該流對象是阻塞式的,讀取流讀到數據纔會繼續執行,否則會一直等待,直到讀到數據

連接有兩種方法:

1,  直接將流對象做爲構造函數的參數傳入彼此

2,  分別創建對象後通過connect()方法連接

代碼演示:






RandomAccessFile

         支持隨機訪問文件的讀取和寫入

         該類不是IO體系中子類

         而是直接繼承自Object。

         但是它是IO包中的成員,因爲它具備讀和寫功能

         內部封裝了一個數組,而且通過指針對數組的元素進行操作。

         可以通過getFilePointer獲取指針位置。

         同時可以通過seek改變指針的位置

 

         其實完成讀寫的原理就是內部封裝了字節輸入流和輸出流

 

         通過構造函數可以看出來,該類只能操作文件,而且還有模式,參數”r”只讀”rw”

讀寫”rws””rwd”

 

DataInputStream和DataOutputStream

專門用來操作基本數據類型的流對象




操作字節數組

ByteArrayInputStream和ByteArrayOutputStream

 

ByteArrayInputStream在構造的時候,需要接收數據源,而且數據源是一個字節數組

ByteArrayOutputStream:在構造的時候,不用定義數據目的,因爲該對象中已經封裝了可變長度的字節數組。這就是數據目的地

 

因爲這兩個對象都操作的數組,並沒有使用系統資源。所以不用關閉流


操作字符數組

CharArrayReader和CharArrayWriter

 

操作字符串

StringReader和StringWriter

 

字符集編碼問題:

         使用不同的字符集進行讀寫,會出現亂碼


編碼:字符串變成字節數組

解碼:字節數組變成字符串

 

Stringàbyte[]

Byte[]àString



練習:

五個學生,每個學生有3門課的成績,從鍵盤輸入以上數據(包括姓名,三門課成績),

輸入格式:zhangsan,30,49,60計算出總成績,並把學生的信息和計算出的總分數按高低順序存放在磁盤文件”stud.txt”中。

思路:

1,  描述學生對象

2,  定義操作學生的工具類

思想:

1,  通過鍵盤錄入一行數據,並將信息取出封裝成學生對象

2,  將學生對象存儲到集合中,因爲要按成績排序,所以用TreeSet集合

3,  將集合的信息寫入到一個文件中

 

返回一個強行逆轉比較器

 Comparator<>cmp = Collection.ReverseOrder();






發佈了49 篇原創文章 · 獲贊 12 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章