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