java面向對象4

概念:

流是個抽象的概念,是對輸入輸出設備的抽象,java程序中,對於數據的輸入/輸出操作都是以流的方式進行。設備可以是文件,網絡,內存等。


流具有方向性,至於是輸入流好事輸出流則是一個相對的概念,一般以程序爲參考,如果數據的流向是程序至設備,我們稱爲輸出流,反之我們稱爲輸入流

可以將流想象成一個“水流管道”,水流就在這管道中形成了,自然就出現了方向的概念。


當程序需要從某個數據源讀入數據的時候,就會開啓一個輸入流,數據源可以是文件,內存或網絡等等。相反地,需要寫出數據到某個數據源目的地的時候,也會開啓一個輸出流,這個數據源目的地也可以是文件,內存或網絡等等。

流的分類

處理的數據單位不同,可分爲:字符流,字節流

數據流方向不同,    可分爲:輸入流,輸出流

功能不同                          可分爲:節點流,處理流

節點流

節點流從一個特定的數據源讀寫數據。即節點流是直接操作文件,網絡等的流,

流入FileInputStream和FileOutputStream,他們直接從文件中讀取或往文件中寫入字節流。

處理流

“連接”在已存在的流(節點流或處理流)之上通過對數據的處理爲程序提供更爲強大的讀寫功能。過濾流是使用一個已經存在的輸入流或輸出流連接創建的,過濾流就是對節點進行一系列的包裝。例如BufferedInputStream和BufferedOutputStream,使用已經存在的節點流來構造,提供帶緩衝的讀寫,提高了讀寫的效率,以及DataInputStream和DataOutputStream,使用已經存在的節點流來構造,提供了讀寫java中的基本類型的功能。他們都屬於過濾流。


流的結構

Java所有的流類位於java.io包中,都分別繼承一下四種抽象流類型。


流的總結:


繼承自InputStream/OutputStream的流都是用於向程序中輸入/輸出數據,且數據的單位都是字節(1byte=8bit)

InputStream 抽象了應用程序讀取數據的方式

OutputStream 抽象了而應用程序寫出數據的方式

EOF = End 讀到-1 就讀到結尾

輸入流基本方法


輸出流基本方法


FileInputStream 具體實現了在文件上讀取數據

FileOutputStream 實現了想文件中寫出byte數據的方法

DataOutputStream/DataInputStream

字節緩衝流(BufferedInputStream 和 BufferedOutputStream)

提高了IO 的性能。從應用程序中把輸入放入文件。

字符流

繼承自Reader/Writer 的流都是用於向程序中輸入/輸出數據,且數據的單位都是字符(2byte=16bit)

操作文本文件

編碼

UTF-8   gbk   utf-16be     

認識文本和文本文件


字符流(Reader輸入流writer 輸出流)

字符的初六一次處理一個字符

字符的底層仍然是基本的字節序列

字符流的基本實現

InputStreamReader 完成byte流解析爲char流,按照編碼解析

OutputStreamWriter 完成char流到byte流,按照編碼處理

FileWriter和FileReader          

字符流過濾流

BufferedReader(一次讀一行)

BufferedWriter/PrinterWriter(一次寫一行)

字符流和字節流的區別

字符流是有java虛擬機將字節轉換爲2個字節的unicode字符爲單位的字符而成的,所以它對奪冠語言支持性比較好!如果是音頻文件,圖片,歌曲,就用字節流好點,如果是關係到中文的,用字符流好點。

所有文件的存儲都是字節的存儲,在磁盤上保留的並不是文件的字符而是先把字符編碼成字節

對象序列化

概念

將Object轉換爲byte序列,反之叫對象的反序列化

例如將對象保存到文件中,或者在網上傳輸,都需要進行對象序列化操作

 

序列化流(ObjectOutputStream)---writeObject

 

反序列化流(ObjectInputStream) readObject

 

序列化接口(Serializable)

對象必須實現序列化接口,才能進行序列化,否則將出現異常,對於這個接口沒有任何方法,只是一個標準。


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