JAVA序列化和反序列化

JAVA序列化和反序列化

文章目錄

  • JAVA序列化和反序列化
    • 序列化
      • 什么是序列化?
      • 為什么要進行序列化?
      • 如何將對線進行序列化
      • 具體實現過程
    • 完整代碼

序列化

什么是序列化?

就是將對象轉化為字節的過程

為什么要進行序列化?

  1. 讓數據更高效的傳輸
  2. 讓數據更好的被存儲

如何將對線進行序列化

對象要想進行序列化必須滿足兩個條件:

  1. 該類必須實現 java.io.Serializable 接口
  2. 該類的所有屬性必須是可序列化的

具體實現過程

通過implements實現序列化接口:

import java.io.Serializable;public class student implements Serializable {public String name;public int course;public int age;public void behavior(){System.out.println("I am student");}
}

這樣就允許該對象類被序列化,重寫序列化函數

// 導入java.io.*包,這個包包含了Java IO的所有類和接口,提供了全面的輸入/輸出接口支持。  
import java.io.*;// 定義一個名為Serialization_And_Unserialization的公共類。這個類將演示如何實現對象的序列化和反序列化。  
public class Serialization_And_Unserialization {// 定義一個公共方法Serialize,它接受一個Object類型的對象和一個File類型的文件名作為參數。這個方法將對象序列化并寫入到指定的文件中。  public void Serialize(Object obj,File filename) throws IOException {// 創建一個FileOutputStream對象,它將創建一個新的文件輸出流,允許將字節寫入到指定的文件中。  FileOutputStream FO = new FileOutputStream(filename);  //新建一個文件輸出流 將字節寫入文件的輸出流  // 創建一個ObjectOutputStream對象,它將創建一個新的對象輸出流,用于將對象序列化并寫入到之前創建的文件輸出流中。  ObjectOutputStream OOS = new ObjectOutputStream(FO);// 使用ObjectOutputStream的writeObject方法將對象序列化并寫入到文件輸出流中。  OOS.writeObject(obj);}
}

使用我們上篇java基礎文字寫好的對象來進行測試

import java.io.File; // 導入文件類,用于創建文件對象  
import java.io.IOException; // 導入IOException類,處理IO操作可能出現的異常  public class Xl { // 定義一個名為Xl的公共類  public static void main(String[] args) throws IOException, ClassNotFoundException { // 主方法,程序入口  student stu2 =new student(); // 創建一個名為stu2的學生對象  Serialization_And_Unserialization s =new Serialization_And_Unserialization(); // 創建一個Serialization_And_Unserialization對象,用于進行對象的序列化和反序列化操作  s.Serialize(stu2, new File("stu2.txt")); // 使用Serialize方法將stu2對象序列化并保存到名為stu2.txt的文件中  }
}

我們可以看到文件已經生成了
在這里插入圖片描述
接下來再寫一個方法將它進行反序列化

 public Object Unserialize(String filename) throws IOException, ClassNotFoundException {// 創建一個FileInputStream對象,它將創建一個新的文件輸入流,允許從指定的文件中讀取字節。FileInputStream FI = new FileInputStream(filename);// 創建一個ObjectInputStream對象,它將創建一個新的對象輸入流,用于從之前創建的文件輸入流中讀取并反序列化對象。ObjectInputStream OIS =  new  ObjectInputStream(FI);// 使用ObjectInputStream的readObject方法從文件輸入流中讀取并反序列化對象,然后返回這個對象。return  OIS.readObject();}

我們進行調用

    Object stu3=s.Unserialize("stu2.txt"); // 使用Unserialize方法從名為stu2.txt的文件中讀取并反序列化對象,然后將其賦給stu3變量System.out.println(stu3); // 打印stu3對象

在這里插入圖片描述
看到已經準換回來了

完整代碼

重寫方法代碼

// 導入java.io.*包,這個包包含了Java IO的所有類和接口,提供了全面的輸入/輸出接口支持。  
import java.io.*;// 定義一個名為Serialization_And_Unserialization的公共類。這個類將演示如何實現對象的序列化和反序列化。  
public class Serialization_And_Unserialization {// 定義一個公共方法Serialize,它接受一個Object類型的對象和一個File類型的文件名作為參數。這個方法將對象序列化并寫入到指定的文件中。  public void Serialize(Object obj,File filename) throws IOException {// 創建一個FileOutputStream對象,它將創建一個新的文件輸出流,允許將字節寫入到指定的文件中。  FileOutputStream FO = new FileOutputStream(filename);  // 創建一個ObjectOutputStream對象,它將創建一個新的對象輸出流,用于將對象序列化并寫入到之前創建的文件輸出流中。  ObjectOutputStream OOS = new ObjectOutputStream(FO);// 使用ObjectOutputStream的writeObject方法將對象序列化并寫入到文件輸出流中。  OOS.writeObject(obj);}// 定義一個公共方法Unserialize,它接受一個String類型的文件名作為參數。這個方法將從指定的文件中讀取對象并將其反序列化。public Object Unserialize(String filename) throws IOException, ClassNotFoundException {// 創建一個FileInputStream對象,它將創建一個新的文件輸入流,允許從指定的文件中讀取字節。FileInputStream FI = new FileInputStream(filename);// 創建一個ObjectInputStream對象,它將創建一個新的對象輸入流,用于從之前創建的文件輸入流中讀取并反序列化對象。ObjectInputStream OIS =  new  ObjectInputStream(FI);// 使用ObjectInputStream的readObject方法從文件輸入流中讀取并反序列化對象,然后返回這個對象。return  OIS.readObject();}
}

調用代碼

import java.io.File; // 導入文件類,用于創建文件對象
import java.io.IOException; // 導入IOException類,處理IO操作可能出現的異常public class Xl { // 定義一個名為Xl的公共類public static void main(String[] args) throws IOException, ClassNotFoundException { // 主方法,程序入口student stu2 =new student(); // 創建一個名為stu2的學生對象Serialization_And_Unserialization s =new Serialization_And_Unserialization(); // 創建一個Serialization_And_Unserialization對象,用于進行對象的序列化和反序列化操作s.Serialize(stu2, new File("stu2.txt")); // 使用Serialize方法將stu2對象序列化并保存到名為stu2.txt的文件中Object stu3=s.Unserialize("stu2.txt"); // 使用Unserialize方法從名為stu2.txt的文件中讀取并反序列化對象,然后將其賦給stu3變量System.out.println(stu3); // 打印stu3對象}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167406.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue中的$nextTick

?🌈個人主頁:前端青山 🔥系列專欄:Vue篇 🔖人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來vue篇專欄內容:vue中的$nextTick 目錄 🐋Vue中的$nextTick有什么作用? 🐋一、…

socket can中是如何根據 結構體can_bittiming_const中的字段 計算bitrate的?

在 SocketCAN 中,can_bittiming_const 結構體用于表示 CAN 總線的定時參數,包括位率(bitrate)的計算。can_bittiming_const 包含了許多與位率相關的參數,其中一些參數用于計算實際的位率。 下面是一些與位率計算相關的…

小辰的智慧樹(差分+前綴和)

登錄—專業IT筆試面試備考平臺_牛客網 1.考慮總長度之和不能超過m,2考慮限制每棵樹高度不能低于ci,如果用二分最短輸能截到的高度,還要另外去判斷,是否每棵樹mid都能嚴格大于ci ,這樣容易超時,換個角度&…

SQL常見函數整理 _ lead() 向下偏移

1. 用法 是在窗口函數中使用的函數,它用于獲取當前行的下一行(后一行)的某個列的值。具體來說,LEAD() 函數可用于查找任何給定行的下一行(后一行)的值,同時也可控制行數偏移量(offse…

競賽選題 題目:基于LSTM的預測算法 - 股票預測 天氣預測 房價預測

文章目錄 0 簡介1 基于 Keras 用 LSTM 網絡做時間序列預測2 長短記憶網絡3 LSTM 網絡結構和原理3.1 LSTM核心思想3.2 遺忘門3.3 輸入門3.4 輸出門 4 基于LSTM的天氣預測4.1 數據集4.2 預測示例 5 基于LSTM的股票價格預測5.1 數據集5.2 實現代碼 6 lstm 預測航空旅客數目數據集預…

社交媒體廣告數據采集:Jsoup 的最佳實踐

搜狐是中國領先的綜合門戶網站之一,廣告在其網站上廣泛投放。為了了解搜狐廣告的策略和趨勢,采集和分析搜狐廣告數據變得至關重要。但是,搜狐網站的廣告數據通常需要通過網頁抓取的方式獲取,這就需要一個強大的工具來解析和提取數…

面試:線上問題處理

文章目錄 在處理線上問題時,你的排查思路和步驟是什么線上偶發性問題如何處理和跟蹤當系統出現大量錯誤日志時,你會如何分析和解決問題在高并發場景中,如何排查和解決線程安全問題當系統出現大規模的故障時,你的應急處理和恢復策略…

用友BIP與用友BIP對接集成銷售出庫列表查詢連通銷售出庫單個保存((紅字)銷售出庫審核-v)

用友BIP與用友BIP對接集成銷售出庫列表查詢連通銷售出庫單個保存((紅字)銷售出庫審核-v) 源系統:用友BIP 面向數智化市場,用友傾力打造了全球領先的數智商業創新平臺——用友BIP,定位為數智商業的應用級基礎設施、企業服務產業的共…

虛擬機系列:(VMware Workstation Pro)Centos7下搭建Android開發環境及Android真機調試

一、Android SDK 安裝配置 1、環境 Linux系統為:Red Hat Enterprise Linux 7 64 位 ; 當然還需要Java環境,java 環境這里不敘述; 2、Android Studio 安裝 (1)下載位置: http://www.android-studio.org/ 我這里下載的:android-studio-ide-191.5977832-linux.tar.gz …

pat實現基于鄰接矩陣表示的深度優先遍歷

void DFS(Graph G, int v) {visited[v] 1;printf("%c ", G.vexs[v]);for (int i 0; i < G.vexnum; i) {if (!visited[i] && G.arcs[v][i]) DFS(G, i);} }

SpectralGPT: Spectral Foundation Model 論文翻譯2

遙感領域的通用大模型 2023.11.13在CVPR發表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 實驗 ? 在本節中&#xff0c;我們將嚴格評估我們的SpectralGPT模型的性能&#xff0c;并對其進行基準測試SOTA基礎模型&#xff1a;ResN…

kubernetesr進階--Security Context之為容器設置Security Context

容器的定義中包含 securityContext 字段&#xff0c;該字段接受 SecurityContext 對象。通過指定該字段&#xff0c;可以為容器設定安全相關的配置&#xff0c;當該字段的配置與 Pod 級別的 securityContext 配置相沖突時&#xff0c;容器級別的配置將覆蓋 Pod 級別的配置。容器…

03.依賴倒置原則(Dependence Inversion Principle)

概述 高層模塊不應依賴低層模塊&#xff0c;二者都應該依賴其抽象。而抽象不應依賴細節&#xff0c;細節應該依賴抽象。依賴倒置原則的中心思想其實就是面向接口編程。 相對于細節的多變性&#xff0c;抽象的東西會穩定的多&#xff0c;所以以抽象為基礎搭建的架構自然也會比以…

EMG肌肉電信號處理合集(二)

本文主要展示常見的肌電信號特征的提取說明。使用python 環境下的Pysiology計算庫。 目錄 1 肌電信號第一次burst的振幅&#xff0c; getAFP 函數 2 肌電信號波長的標準差計算&#xff0c;getDASDV函數 3 肌電信號功率譜頻率比例&#xff0c;getFR函數 4 肌電信號直方圖…

Day41:198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

文章目錄 198.打家劫舍思路代碼實現 213.打家劫舍II思路代碼實現 337.打家劫舍 III思路代碼實現記憶化遞歸法&#xff08;其他解法&#xff09; 198.打家劫舍 題目鏈接 思路 確定dp數組&#xff08;dp table&#xff09;以及下標的含義 dp[i]&#xff1a;考慮下標i以內的房屋…

華清遠見嵌入式學習——網絡編程——小項目

項目要求&#xff1a; 代碼實現&#xff1a; 服務器端&#xff1a; #include <myhead.h>//定義協議包 struct proto {char type;char name[20];char text[128]; };int main(int argc, const char *argv[]) {//判斷從終端輸入的字符串的個數if(argc ! 3){printf("…

mysql中TIMESTAMP 和DATETIME數據類型的區別

在MySQL中&#xff0c;TIMESTAMP和DATETIME都用于表示日期和時間&#xff0c;但是它們之間存在一些關鍵區別。下面我們通過幾個關鍵點來詳細了解這兩種數據類型的使用&#xff1a; 存儲范圍 TIMESTAMP類型的存儲范圍從1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC。DAT…

Django之importlib模塊

【1】介紹 import importlib importlib模塊是Python中用于動態加載和導入模塊的內置模塊 它提供了一組函數和類&#xff0c;使得我們可以在運行時根據需要加載模塊&#xff0c;并且可以對已導入的模塊進行操作和管理 【2】importlib模塊中的import_module方法 【2.1】導入模塊…

無需API開發,錢方QFPay連接營銷系統和廣告推廣平臺

隨著電子商務市場的不斷發展&#xff0c;企業需要集成各種業務系統&#xff0c;以提高業務效率和降低運營成本。錢方QFPay提供了一種創新的解決方案&#xff0c;幫助企業實現系統間的連接和集成&#xff0c;無需進行復雜的API開發。除了電商系統和客服系統&#xff0c;錢方還能…

武漢光庭公司地圖引擎開發工程師24秋招三場面試完整流程

本文介紹2024屆秋招中&#xff0c;武漢光庭信息技術股份有限公司的智能駕駛地圖引擎開發工程師崗位一面、二面、三面的面試基本情況、提問問題等。 10月投遞了武漢光庭信息技術股份有限公司的智能駕駛地圖引擎開發工程師崗位&#xff0c;暫時并不清楚所在的部門。目前完成了全部…