有道雲筆記 連接配接:
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]