4.6.1 java中有幾種類型的流?
Java中的流分為兩種,一種是字節流,另一種是字符流,分別由四個抽象類來表示(每種流包括輸入和輸出兩種所以一共四個):InputStream,OutputStream,Reader,Writer。Java中其他多種多樣變化的流均是由它們派生出來的.
4.6.2字節流和字符流有什么差別?它們各自會用在哪些場合?
stream結尾都是字節流,reader和writer結尾都是字符流。兩者的區別就是讀寫的時候一個是按字節讀寫,一個是按字符。
實際使用通常差不多。
在讀寫文件需要對內容按行處理,比如比較特定字符,處理某一行數據的時候一般會選擇字符流。
只是讀寫文件,和文件內容無關的,一般選擇字節流。
4.6.3什么是java序列化?在哪些場合下需要用到序列化?如何實現java序列化?(或者問Serializable接口有什么作用?)
序列化就是把Java對象儲存在某一地方(硬盤、網絡),也就是將對象的內容進行流化。
反序列化:就是把二進制數據反序列化成對象數據。
為什么要序列化?方便於傳輸、存儲(內存中的對象狀態保存到一個文件中或者數據庫中;套接字在網絡上傳送對象;RMI)。JAVA序列化有哪些方式,通過實現Serialization接口,即可實現序列化。
4.6.4 transient關鍵字有什么作用?
Java的serialization提供了一種持久化對象實例的機制。當持久化對象時,可能有一個特殊的對象數據成員,我們不想用serialization機制來保存它。為了在一個特定對象的一個域上關閉serialization,可以在這個域前加上關鍵字transient。當一個對象被序列化的時候,transient型變量的值不包括在序列化的表示中,然而非transient型的變量是被包括進去的。
4.6.5讀取xml文件有哪些方式?
常見的有DOM和SAX方式。
4.6.6用DOM和SAX解析xml文件方式的優缺點是什么?它們各自的適用范圍是什么?
在基於DOM的方式里,由於我們會把整個xml文檔以DOM樹的方式裝載到內存里,所以可以邊解析邊修改,而且還能再次解析已經被解析過的內容。
而在SAX的方式里,由於我們是以基於回調函數的方式來解析,所以並不需要把整個文檔載入到內存,這樣能節省內存資源。
所以說,選擇 DOM 還是 SAX,這取決於如下三個個因素。
第一,如果我們在解析時還打算更新xml里的數據,那么建議使用DOM方式。
第二,如果待解析的文件過大,把它全部裝載到內存時可能會影響到內存性能,那么建議使用SAX的方式。
第三,如果我們對解析的速度有一定的要求,那么建議使用SAX方式,因為它比DOM方式要快些。