天天看點

【馬士兵】筆記_Java IO流

有道雲筆記 連接配接:

http://note.youdao.com/share/?id=7a322ea0150fbc678da417d68f53c9f4&type=note

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下可忽略:

 《Java IO流》

把“流(Stream)”想象成捅在檔案上的“管道”。

做一些個IO系統的項目用到的是這章内容。

輸入/輸出的方向是按程式(而不是檔案來講的)。從檔案中讀資料--輸入流;往檔案裡寫資料--輸出流。

1字元 = 2位元組。Java中是UNICODE字元串,UTF-16。

Stream結尾的都是位元組流。

InputStream、OutputStream、Reader、Writer都是抽象類(非接口)。

将String直接寫出的方法voidwrite(Stringstr)thorowsIOException是用到了String的一個構造方法,能将字元串轉化為字元數組char[]。

總結:

Java的IO流,使用了裝飾模式。InputStream隻能讀位元組、Byte[]數組,

而reader的可以讀char; 如果在reader上再裝飾一層buffered,那麼就可以讀String,方法是readline()。

BufferedReader和BufferedWriter很普遍。readLine()是BufferedReader的好處之一,讀一行。

注意InputStreamReader和Reader的差別,前者是針對InputStream對象的,後者是針對File的。一個是處理流,一個是節點流。

ISO8859_1 :歐洲的字元編碼,包含所有西歐語言。也叫latin-1。

unicode:包含所有語言的編碼集。包括utf-8,utf-16等。

GB**** :中文(國标)編碼集。包括GBK,GB2312等。

上例,BufferedReader的封裝是為了使用readLine()方法,常用。System.in:接收的是鍵盤輸入,類型是InputStream。

上例,示範了處理流套裝節點流。ByteArrayOutputStream,這種輸出流将資料按“位元組串”輸出(而不是OutputStream的一個個位元組輸出);這樣,進一步用DataOutputStream套裝,就可以将資料按double、boolean等類型(分别占8和1個位元組)直接寫入,用的writeDouble()和writeBoolean()方法。

DataInputStream在網絡傳輸中用于讀取遠端傳過來的位址等資訊(直接按int讀)。

Object的序列化,最常見的例子是:Word中畫一個矩形(或三角形等形狀),是把這個矩形的資訊放在一個Object中,存起來;下次啟動Word時自動調取這個Object重新畫出來。電子遊戲的存盤,也是将目前場景中的所有按Object存起來。

注意,serializable接口是一個辨別性接口,裡面沒有方法。這個标志是給編譯器看的。

上例,transient,“透明的”,表示在序列化的時候不考慮進去。當把一個T對象序列化又反序列化後,i、j、d的值不變,但是k的值是0.說明序列化的時候沒有把k算進去。

email: [email protected]