Java將對象寫入文件讀出——序列化與反序列化

来源:http://www.cnblogs.com/PersistWp/archive/2017/08/16/7375774.html
-Advertisement-
Play Games

Java類中對象的序列化工作是通過ObjectOutputStream和ObjectInputStream來完成的。 寫入: 讀取: 註意: 對於任何需要被序列化的對象,都必須要實現介面Serializable,它只是一個標識介面,本身沒有任何成員,只是用來標識說明當前的實現類的對象可以被序列化。 ...


Java類中對象的序列化工作是通過ObjectOutputStream和ObjectInputStream來完成的。

寫入:

 1         File aFile=new File("e:\\c.txt");
 2         Stu a=new Stu(1, "aa", "1");
 3         FileOutputStream fileOutputStream=null;
 4         try {
 5             fileOutputStream = new FileOutputStream(aFile);
 6             ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
 7             objectOutputStream.writeObject(a);
 8             objectOutputStream.flush();
 9             objectOutputStream.close();
10         } catch (FileNotFoundException e) {
11             // TODO Auto-generated catch block
12             e.printStackTrace();
13         } catch (IOException e) {
14             // TODO Auto-generated catch block
15             e.printStackTrace();
16         }finally {
17             if(fileOutputStream!=null)
18             {
19                 try {
20                     fileOutputStream.close();
21                 } catch (IOException e) {
22                     // TODO Auto-generated catch block
23                     e.printStackTrace();
24                 }            
25             }
26         }    

讀取:

1          FileInputStream fileInputStream=new FileInputStream(aFile);
2             ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
3             Stu s=(Stu)objectInputStream.readObject();
4             System.out.println(s);

註意:

對於任何需要被序列化的對象,都必須要實現介面Serializable,它只是一個標識介面,本身沒有任何成員,只是用來標識說明當前的實現類的對象可以被序列化。

如果在類中的一些屬性,希望在對象序列化過程中不被序列化,使用關鍵字transient標註修飾就可以。當對象被序列化時,標註為transient的成員屬性將會自動跳過。如果一個可序列化的對象包含某個不可序列化對象的引用,那麼序列化操作會失敗,會拋出NotSerializableException異常,那麼將這個引用標記transient,就可以序列化了。
當一個對象被序列化時,只保存對象的非靜態成員變數,不能保存任何的成員方法,靜態的成員變數。 
如果一個對象的成員變數是一個對象,那麼這個對象的數據成員也會被保存還原,而且會是遞歸的方式。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天寫這個是為了 提醒自己 編程過程 不僅要有邏輯 思想 還有要規範 代碼 這樣可讀性 感謝我牛神提供的文檔 1、PHP 編程規範與編碼習慣最主要的有以下幾點: 1 文件說明 2 function 函數體說明 3 代碼縮進 4 if省略 5 變數規範 6 命名規範 7 十行一註釋 8 註釋風格 9 ...
  • 虛擬機類載入機制 一、類載入的階段和時機 1.階段 整個生命周期包括:載入(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個階段。 其中驗證、準 ...
  • 通過set()獲取兩個數組的交/並/差集: ...
  • 線程實現和線程安全性 參考博客:(http://www.importnew.com/20672.html),參考書籍:《Java併發編程實戰》 一、線程Java代碼實現 1.繼承Thread + 聲明Thread的子類 + 運行thread子類的方法 2.創建Thread的匿名子類 3.實現Runn ...
  • IP的獲取與轉換 1、前言 IP轉換成整型存儲是資料庫優化一大趨勢,字元串索引比整型索引消耗資源很多,特別是表中數據量大的時候,以及求查詢某一個ip段的數據。本文所指的IP是ip4,ip6暫不再討論範圍 2、ip4轉化為整形 這裡將介紹: php自帶函數 ip2long php原生模擬ip2long ...
  • 在php中有一個 serialize() 函數 可以把數組序列化成字元串進行存儲和傳輸 如果想反序列化這種字元串,在php中只需要一個簡單的unserialize() 函數就可以完成了.但是在golang中可就沒有這麼容易了,非得費個九牛二虎之力,寫上不少代碼才行。 這時候只想感嘆一下,php真的是 ...
  • 使用過SpringMVC的都知道DispatcherServlet,下麵介紹下該Servlet的啟動與初始化。作為Servlet,DispatcherServlet的啟動與Serlvet的啟動過程是相聯繫的。在Serlvet的初始化過程程中,Serlvet的init方法會被調用,以進行初始化。Dis ...
  • 首先,整個頁麵包括:列表數據、數據總數、當前頁數、每頁顯示數據個數、列表總頁數、當前索引數 新建Page類,包含以上6個屬性。其中 總頁數 和 當前索引值 可以通過計算得出,所以可以註釋掉 計算總頁數: 計算當前索引值: 在後臺代碼中設置當前頁面pageNo、每頁多少數據pageSize 在serv ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...