国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java? 教程(對象流)

CoffeX / 2789人閱讀

對象流

正如數據流支持原始數據類型的I/O一樣,對象流也支持對象的I/O,大多數(但不是全部)標準類支持其對象的序列化,那些是實現標記接口Serializable的。

對象流類是ObjectInputStream和ObjectOutputStream,這些類實現ObjectInput和ObjectOutput,它們是DataInputDataOutput的子接口。這意味著數據流中涵蓋的所有原始數據I/O方法也在對象流中實現,因此,對象流可以包含原始值和對象值的混合。ObjectStreams示例說明了這一點,ObjectStreams創建與DataStreams相同的應用程序,并進行了一些更改,首先,價格現在是BigDecimal對象,以更好地代表小數值,其次,將Calendar對象寫入數據文件,指示發票日期。

如果readObject()沒有返回預期的對象類型,則嘗試將其強制轉換為正確的類型可能會拋出ClassNotFoundException,在這個簡單的例子中,這不可能發生,因此我們不會嘗試捕獲異常,相反,我們通過向main方法的throws子句添加ClassNotFoundException來通知編譯器我們已經意識到了這個問題。

復雜對象的輸出和輸入

writeObjectreadObject方法易于使用,但它們包含一些非常復雜的對象管理邏輯,這對像Calendar這樣的類來說并不重要,它只封裝了原始值,但是許多對象包含對其他對象的引用,如果readObject是要從流重建一個對象,它必須能夠重建原始對象所引用的所有對象,這些附加對象可能有自己的引用,依此類推。在這種情況下,writeObject遍歷整個對象引用網絡,并將該網絡中的所有對象寫入流,因此,對writeObject的單個調用可能導致將大量對象寫入流。

下圖演示了這一點,其中調用writeObject來寫入名為a的單個對象,該對象包含對象bc的引用,而b包含對de的引用,調用writeobject(a)不僅寫入a,而且寫入重建a所需的所有對象,因此該網絡中的其他四個對象也被寫入。當readObject讀回a時,也會讀回其他四個對象,并保留所有原始對象引用。

你可能想知道如果同一個流上的兩個對象都包含對單個對象的引用會發生什么,當他們被回讀時,他們都會引用一個對象嗎?答案是肯定的。一個流只能包含一個對象的副本,盡管它可以包含對該對象的任意數量的引用,因此,如果你明確地將對象寫入流兩次,那么你實際上只寫入了兩次引用,例如,如果以下代碼將對象ob寫入流兩次:

Object ob = new Object();
out.writeObject(ob);
out.writeObject(ob);

每個writeObject都必須與readObject匹配,因此讀回流的代碼將如下所示:

Object ob1 = in.readObject();
Object ob2 = in.readObject();

這產生兩個變量ob1ob2,它們是對單個對象的引用。

但是,如果將單個對象寫入兩個不同的流,則會有效地復制它 — 讀取兩個流的單個程序將看到兩個不同的對象。

上一篇:數據流

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72988.html

相關文章

  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...

    lifesimple 評論0 收藏0
  • Java? 教程(命令行I/O)

    命令行I/O 程序通常從命令行運行,并在命令行環境中與用戶交互,Java平臺以兩種方式支持這種交互:通過標準流和控制臺。 標準流 標準流是許多操作系統的一個特性,默認情況下,它們從鍵盤讀取輸入并將輸出寫入顯示器,它們還支持文件和程序之間的I/O,但該功能由命令行解釋器控制,而不是程序。 Java平臺支持三種標準流:標準輸入,可通過System.in訪問;標準輸出,可通過System.out訪問;和...

    jeyhan 評論0 收藏0
  • Java? 教程(緩沖

    緩沖流 到目前為止,我們看到的大多數示例都使用無緩沖的I/O,這意味著每個讀取或寫入請求都由底層操作系統直接處理,這可以使程序效率低得多,因為每個這樣的請求通常觸發磁盤訪問、網絡活動或一些相對昂貴的其他操作。 為了減少這種開銷,Java平臺實現了緩沖的I/O流,緩沖輸入流從稱為緩沖區的內存區讀取數據,僅當緩沖區為空時才調用原生輸入API,類似地,緩沖輸出流將數據寫入緩沖區,并且僅在緩沖區已滿時才調...

    gougoujiang 評論0 收藏0
  • Java? 教程(數據

    數據流 數據流支持原始數據類型值(boolean、char、byte、short、int、long、float和double)以及String值的二進制I/O,所有數據流都實現DataInput接口或DataOutput接口,本節重點介紹這些接口最廣泛使用的實現,DataInputStream和DataOutputStream。 DataStreams示例通過寫出一組數據記錄,然后再次讀取它們來演...

    wujl596 評論0 收藏0
  • Java? 教程(格式化

    格式化流 實現格式化的流對象是PrintWriter(字符流類)或PrintStream(字節流類)的實例。 你可能需要的唯一PrintStream對象是System.out和System.err(有關這些對象的更多信息,請參閱命令行中的I/O),當你需要創建格式化的輸出流時,請實例化PrintWriter,而不是PrintStream。 與所有字節和字符流對象一樣,PrintStream和Pri...

    Render 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<