Java零基礎-反序列化和序列化

哈嘍,各位小伙伴們,你們好呀,我是喵手。

??今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一個人雖可以走的更快,但一群人可以走的更遠。

??我是一名后端開發愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業余時間把自己所學到所會的,通過文章的形式進行輸出,希望以這種方式幫助到更多的初學者或者想入門的小伙伴們,同時也能對自己的技術進行沉淀,加以復盤,查缺補漏。

小伙伴們在批閱的過程中,如果覺得文章不錯,歡迎點贊、收藏、關注哦。三連即是對作者我寫作道路上最好的鼓勵與支持!

前言

Java是一門面向對象的編程語言,因此對于數據的處理也需要以對象的形式進行。在實際的開發中,我們經常需要將Java對象轉化為二進制流進行傳輸或存儲。而序列化就是將Java對象轉化為二進制流的過程,反序列化則是將二進制流轉化為Java對象的過程。序列化和反序列化是Java編程中非常重要的概念,本文將深入介紹Java中的序列化和反序列化機制。

摘要

本文將從以下幾個方面對Java中的序列化和反序列化進行介紹:

  1. 什么是序列化和反序列化?
  2. Java中的序列化機制
  3. Java中的反序列化機制
  4. 序列化和反序列化的應用場景案例
  5. 序列化和反序列化的優缺點分析
  6. 類代碼方法介紹
  7. 測試用例
  8. 全文小結和總結

簡介

序列化將Java對象轉化為二進制流的過程,反序列化則是將二進制流轉化為Java對象的過程。Java中的序列化機制是通過實現java.io.Serializable接口實現的。這個接口中沒有任何方法,只是作為一個標記,表示實現該接口的類可以被序列化。

Java中的反序列化機制是通過ObjectInputStream類實現的。這個類可以從輸入流中讀取數據,并將其轉化為Java對象。

源代碼解析

以下是一個簡單的Java序列化和反序列化的示例代碼:

import java.io.*;public class SerializationDemo {public static void main(String[] args) {try {// 創建一個Person對象Person person = new Person("Tom", 20);// 序列化對象到文件中FileOutputStream fileOut = new FileOutputStream("person.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut);out.writeObject(person);out.close();fileOut.close();System.out.println("Serialized data is saved in person.ser");// 反序列化對象FileInputStream fileIn = new FileInputStream("person.ser");ObjectInputStream in = new ObjectInputStream(fileIn);Person person2 = (Person) in.readObject();in.close();fileIn.close();// 輸出反序列化后的Person對象System.out.println("Deserialized Person:");System.out.println("Name: " + person2.getName());System.out.println("Age: " + person2.getAge());} catch (IOException i) {i.printStackTrace();} catch (ClassNotFoundException c) {System.out.println("Person class not found");c.printStackTrace();}}
}class Person implements java.io.Serializable {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}

這個例子序列化了一個Person對象,并將其保存到person.ser文件中。然后,從這個文件中讀取數據,并將其反序列化為一個新的Person對象。

應用場景案例

  1. 網絡傳輸對象:在分布式系統中,我們需要將Java對象序列化成二進制流,在網絡中傳輸,接收方再將其反序列化為Java對象進行處理。
  2. 對象持久化到磁盤:有些時候我們需要將Java對象持久化到磁盤上,以便下次使用時能夠直接加載對象,而不是重新創建對象。

優缺點分析

序列化和反序列化機制具有以下優缺點:

優點:

  1. 序列化和反序列化實現方便。
  2. 方便網絡傳輸和持久化。
  3. 對象的序列化可以保護對象的數據,使其難以被篡改。

缺點:

  1. 序列化和反序列化需要占用較多的CPU和內存資源。
  2. 對于一些敏感的數據,序列化可能會使數據難以保密。

類代碼方法介紹

  1. ObjectOutputStream類:實現對象序列化的類。
  2. ObjectInputStream類:實現對象反序列化的類。
  3. Serializable接口:一個標記接口,表示實現該接口的類可以被序列化。

測試用例

以下是一個簡單的測試用例:

import java.io.*;public class SerializationDemoTest {public static void main(String[] args) {try {Person person = new Person("Tom", 20);ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(person);objectOutputStream.flush();byte[] bytes = byteArrayOutputStream.toByteArray();ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);Person person2 = (Person) objectInputStream.readObject();System.out.println("Name: " + person2.getName());System.out.println("Age: " + person2.getAge());} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}class Person implements java.io.Serializable {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}

全文小結

本文對Java中的序列化和反序列化機制進行了詳細介紹。通過實現java.io.Serializable接口,我們可以將Java對象序列化為二進制流,以便在網絡中傳輸或持久化到磁盤上。通過ObjectInputStream類,我們可以將二進制流反序列化為Java對象,以便進一步使用或處理。

在實際開發中,序列化和反序列化機制具有非常廣泛的應用場景。掌握這個機制,可以使我們更加靈活地處理Java對象,提高開發效率和安全性。

總結

本文介紹了Java中的序列化和反序列化機制,詳細闡述了其實現原理、應用場景和優缺點。同時,給出了一個簡單的示例,以便讀者更好地理解和掌握這個機制。對于Java編程初學者和想要深入了解Java的人,本文提供了非常有價值的參考資料。

… …

文末

好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。

… …

學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!

wished for you successed !!!


??若喜歡我,就請關注我叭。

??若對您有用,就請點贊叭。

??若有疑問,就請評論留言告訴我叭。

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

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

相關文章

回歸預測 | Matlab實現CPO-BiTCN-BiGRU冠豪豬算法優化雙向時間卷積門控循環單元多變量回歸預測

回歸預測 | Matlab實現CPO-BiTCN-BiGRU冠豪豬算法優化雙向時間卷積門控循環單元多變量回歸預測 目錄 回歸預測 | Matlab實現CPO-BiTCN-BiGRU冠豪豬算法優化雙向時間卷積門控循環單元多變量回歸預測效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 1.Matlab實現CPO-BiTCN-B…

mc生存插火把

題目描述 話說有一天 linyorson 在“我的世界”開了一個 nn 的方陣,現在他有 m 個火把和 k 個螢石,分別放在 (x1,y1)~(xm,ym) 和 (o1,p1)~(ok,pk)的位置,沒有光并且沒放東西的地方會生成怪物。請問在這個方陣中有幾個點會生成怪物&#xf…

Vue開發實例(六)實現左側菜單導航

左側菜單導航 一、一級菜單二、二級菜單三、三級菜單1、加入相關事件 四、菜單點擊跳轉1. 創建新頁面2. 配置路由3. 菜單中加入路由配置4、處理默認的Main窗口為空的情況 五、動態左側菜單導航1、動態實現一級菜單2、動態實現二級菜單 一、一級菜單 在之前的Aside.vue中去實現…

SRIO--IP講解及環回測試

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、IP例化文件二、SRIO環回工程搭建三、板級驗證3.1 板級驗證環節3.2 系統所需硬件3.3 ILA波形前言 本章將為大家介紹 “Serial RapidIO Gen2 ”IP 的使用以及配置方法。“Serial RapidIO Ge…

JavaScript入門學(Web APIs)

1.變量聲明 2 DOM介紹 2.1 什么是DOM 2.2 DOM樹 2.3 DOM對象&#xff08;重要&#xff09; 3.DOM&#xff08;文檔對象模型&#xff09;-獲取元素 3.1 獲取匹配的第一個元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

Canvs的js庫:Fabric.js簡單強大,用于繪制各種圖形

Fabric.js是一個用于創建交互式的HTML5 Canvas應用程序的JavaScript庫。它提供了一個簡單而強大的API&#xff0c;用于在Web瀏覽器中繪制和操作圖形對象。Fabric.js可以用于創建各種圖形應用程序&#xff0c;例如繪圖編輯器、圖像編輯器、流程圖、地圖和數據可視化等。 官網文…

校企合作項目總結

校企合作總結 前言項目框架開發待辦水平越權總結 前言 寒假里小組給了校企合作的項目&#xff0c;分配給我的工作量總共也就兩三套crud&#xff0c;雖然工作很少&#xff0c;但還是從里面學到了很多東西&#xff0c;收獲了大量的實習經驗&#xff0c;在這里總結記錄一下。 項…

FreeRTOS學習筆記——FreeRTOS中斷管理

精華總結&#xff1a; 中斷優先級0為最高&#xff0c;任務優先級0為最低 中斷優先級分組中為方便rtos管理4bit全部設置成搶占優先級 32單片機的中斷管理是由3個寄存器完成&#xff08;名字忽略&#xff0c;具體功能忽略&#xff09;&#xff0c;三個寄存器都是32bit&#xff0c…

微信小程序云開發教程——墨刀原型工具入門(文件設置+編輯組件)

引言 作為一個小白&#xff0c;小北要怎么在短時間內快速學會微信小程序原型設計&#xff1f; “時間緊&#xff0c;任務重”&#xff0c;這意味著學習時必須把握微信小程序原型設計中的重點、難點&#xff0c;而非面面俱到。 要在短時間內理解、掌握一個工具的使用&#xf…

NOC2023軟件創意編程(學而思賽道)python小高組決賽真題

目錄 下載原文檔打印做題: 軟件創意編程 一、參賽范圍 1.參賽組別:小學低年級組(1-3 年級)、小學高年級組(4-6 年級)、初中組。 2.參賽人數:1 人。 3.指導教師:1 人(可空缺)。 4.每人限參加 1 個賽項。 組別確定:以地方教育行政主管部門(教委、教育廳、教育局) 認…

【風格遷移】StyTr2:引入 Transformer 解決 CNN 在長距離依賴性處理不足和細節丟失問題

StyTr2&#xff1a;引入 Transformer 解決 CNN 在長距離依賴性處理不足和細節丟失問題 提出背景StyTr2 組成StyTr2 架構 提出背景 論文&#xff1a;https://arxiv.org/pdf/2105.14576.pdf 代碼&#xff1a;https://github.com/diyiiyiii/StyTR-2 問題&#xff1a; 傳統的神經…

idea中springboot項目創建后追加依賴

springboot項目創建后追加依賴 前言1、安裝插件editstarters設置->插件 2、進入pom.xml 頁面 前言 在項目創建的時候選擇好依賴創建項目&#xff0c;之后追加依賴不是很方便&#xff0c;介紹一個簡單的使用方法&#xff0c;通過editstarters進行添加 1、安裝插件editstart…

在 Ubuntu 終端輸出不同顏色、粗體、下劃線或其他樣式的字體

嗯。調試時總發現自己打印的調試信息太過普通、單調&#xff0c;于是乎…… Notice 要在終端實現字體的特殊樣式&#xff0c;通常通過使用特殊的控制字符來實現&#xff0c;而不是通過某語言本身的功能來實現。 在大多數終端中&#xff0c;可以使用 ANSI 轉義序列來設置字體的…

CleanMyMac X2024測評深度分析與功能全面介紹

一、軟件概述 CleanMyMac X 是一款強大的Mac清理和優化工具&#xff0c;它可以幫助用戶輕松管理和釋放Mac上的空間&#xff0c;優化系統性能&#xff0c;提高運行速度。這款軟件以其直觀的用戶界面和豐富的功能受到了廣大Mac用戶的歡迎。 CleanMyMac X4.14.6全新版下載如下: …

令牌桶算法和漏桶算法各自的應用場景

令牌桶算法和漏桶算法都是流量控制算法&#xff0c;它們在網絡和系統中有著不同的應用場景&#xff0c;具體如下&#xff1a; 令牌桶算法的應用場景&#xff1a; 網絡流量控制&#xff1a; 令牌桶算法廣泛應用于網絡流量控制中&#xff0c;特別是在網絡設備中&#xff0c;如路…

html基礎標簽+Http請求

文章目錄 目錄 文章目錄 前言 一.網址組成 二.HTTP協議解析 Http 請求報文 報文請求方法 報文頭 Cache-Control 常見緩存控制行為 cookie 解析 Http 響應報文 常見狀態碼 三.域名解析(DNS) DNS域名服務器分類 遞歸查詢 迭代查詢 四.端口號 五.路徑信息 六.Https協議 ?對稱…

第一篇【傳奇開心果系列】Python的自動化辦公庫技術點案例示例:深度解讀Pandas庫

傳奇開心果博文系列 系列博文目錄Python的自動化辦公庫技術點案例示例系列 博文目錄前言一、主要特點和功能介紹二、Series 示例代碼三、DataFrame示例代碼四、數據導入/導出示例代碼五、數據清洗示例代碼六、數據選擇和過濾示例代碼七、數據合并和連接示例代碼八、數據分組和聚…

Linux系統管理:虛擬機 Kali Linux 安裝

目錄 一、理論 1.Kali Linux 二、實驗 1.虛擬機Kali Linux安裝準備階段 2.安裝Kali Linux 2. Kali Linux 更換國內源 3. Kali Linux 設置固定IP 4. Kali Linux 開啟SSH遠程連接 5. MobaXterm遠程連接 Kali Linux 三、問題 1.apt 命令 取代哪些 apt-get命令 一、理論…

《OpenScene: 3D Scene Understanding with Open Vocabularies》閱讀筆記1

傳統的3D場景理解方法依賴于帶標簽的3D數據集,用于訓練一個模型以進行單一任務的監督學習。我們提出了OpenScene,一種替代方法,其中模型在CLIP特征空間中預測與文本和圖像像素共同嵌入的3D場景點的密集特征。這種零樣本方法實現了與任務無關的訓練和開放詞匯查詢。例如,為了…

Phoncent博客:探索AI寫作與編程的無限可能

Phoncent博客&#xff0c;一個名為Phoncent的創新AIGC博客網站&#xff0c;于2023年誕生。它的創始人是莊澤峰&#xff0c;一個自媒體人和個人站長&#xff0c;他在網絡營銷推廣領域有著豐富的經驗。莊澤峰深知人工智能技術在內容創作和編程領域的潛力和創造力&#xff0c;因此…