【Java高级特性】java学习之旅34-序列化与反序列化

Java 17 中 Map 与 JSON 互转的 3 种现代方案:原生、Jackson 与 Fastjson2 本文详细介绍了Java 17中Map与JSON互转的三种现代方案:原生方法、Jackson和Fastjson2。通过对比分析各方案的性能、功能完整性和安全性,帮助开发者根据项目需求选择最适合的JSON处理工具。特别适合需要高效处理数据交换的Java开发者,涵盖从基础实现到企业级应用的最佳实践。 阅读详情

Serializable

  1. 可串行化,可序列化,是一种标识接口,表示一种能力。
  2. 实现了该接口的类具有可序列化的能力。
  3. 一般对实体类实现可序列化
  1. 序列化:将对象转换为字节序列,便于数据的存储和网络传输
  2. 反序列化:将字节序列转化为对象

与之相关的类:

  1. 二进制流(继承自字节流)

DataInputStream, DataOutputStream

  1. 对象流(继承自字节流)

ObjectInputStream, ObjectOutputStream

序列化包装数据类型:

    FileOutputStream fos = new FileOutputStream("string.txt");
    
    DataOutputStream dos = new DataOutputStram(fos);
    //String str = "hello world 你好 世界";
    //dos.writeUTF(str);
    Integer i = 12345;
    dos.writeInt(i);
    
    dos.close();
    fos.close();

反序列化包装数据类型:

    FileInputStream fis = new FileInputStream("string.txt");
    DataInputString dis = new DataInputStream(fis);
    //String str = dis,readUTF();
    int i  = dis,readInt()
    
    dis.close();
    fis.close();

序列化学生类型:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));

oos.writeObject(new Student("阿文", 28, '男'));

oos.close();

反序列化学生对象

ObjectInputStream ois = new ObejctInputStream(new FileInputStream("student.txt"));

Student student = (Student)ois.readObejct();

System.out.println(student);

ois.close();

序列化和反序列化集合

Arraylist<Student> list = new Arraylist<>();

list.add(new Student("A", 18, '女');
list.add(new Student("B", 20, '男');
list.add(new Student("C", 16, '女');

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("list.txt"));

oos.writeObject(list);

oos.close();

ObejctInput ois = new ObjectInputStream(new FileInputStream("list.txt"));

List<Student> list2 = (List<Student>)ois.readObject();
System.out.println(list2);

ois.close();

作业:

使用序列化反序列化实现数据的持久化

C++序列化协议设计:从原理到实现,打造高性能数据传输方案 序列化是将内存中的数据结构或对象转换为可存储或传输的字节流的过程,其核心原理在于解决数据在不同系统、进程或时间点间的持久化与交换问题。通过定义统一的编码规则,序列化技术确保了数据的完整性和一致性,是实现分布式系统、网络通信和数据持久化的关键技术基础。在工程实践中,高效的序列化方案能显著提升系统性能,尤其在物联网、嵌入式通信等场景中,如处理CAN协议、UART协议、SPI协议等底层总线数据时,序列化的效率直接决定了系统的实时性与可靠性。常见的序列化方案包括文本格式(如JSON、XML)和二进制格式(如Prot 阅读详情

相关推荐

JSON 与 YAML 格式深度对比:5 大核心差异与 3 种场景选型指南

本文深入对比了JSON与YAML两种主流数据格式的5大核心差异,包括语法结构、数据类型、工具链支持等,并提供了3种典型场景的选型指南。针对Kubernetes配置、RESTful API设计和日志存储等场景,分析了JSON严格规范与YAML灵活特性的适用条件,帮助开发者根据可读性需求、性能要求和安全性考量做出最优选择。

mybwu_com的专栏 368

Java 利用Xstream注解生成和解析xml

ava 利用Xstream生成和解析xml,知识结构: 1.Xstream简介; 使用限制: JDK版本不能 虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全

qq_27029491的博客 893

34、深入解析企业级JavaBean的高级特性与最佳实践

本文深入解析了企业级JavaBean(EJB)的高级特性和最佳实践,涵盖互操作性、生命周期回调、拦截器、平台集成、JPA查询、性能优化、异常处理和安全性等方面。通过示例代码和实际应用场景,帮助开发者构建高效、稳定、安全的企业级应用。

http9protocoller的博客 74

Java学习笔记

目录 1.判断一个输入数字的类型 2.Java的数组是动态长度的 1.判断一个输入数字的类型 前两天参加的卓越班笔试考了一个很简单的问题:判断输入一个整数是否是3的倍数。当时因为有一段时间没看Java基础的内容,都忘了还有hasNextInt()这种函数来判断整数类型。在百度走了一圈,选择了一种try-catch的方法。 publicstaticvoidmain(String[] args) { inti= 0; Scanner in= newScanner(System....

weixin_40908748的博客 847

Java高级JSON解析:FASTJSON解析复杂实例源码分析

Fastjson是一个广泛使用的Java库,可以将Java对象转换为JSON字符串,以及将JSON字符串解析回Java对象。这一功能对于现代Web应用和微服务架构来说至关重要,因为它支持数据的灵活传输与交互。Fastjson不仅提供基本的序列化与反序列化操作,还具备一些高级特性,比如字段过滤、注解支持和自定义序列化器等。在本章中,我们将介绍Fastjson的基本应用,并探讨如何在实际项目中高效地使用它来处理数据转换需求。

weixin_42405592的博客 914

头歌平台 操作系统课堂练习2.3:系统调用

使用 gdb 调试内核,跟踪到 main 函数入口的方法与之前实训一样。系统运行时,执行的前 3 个系统调用的编号和名字分别是什么?系统运行时,执行的前 3 个系统调用的编号和名字分别是什么?本关卡使用版本 1 内核进行分析,版本 1 内核文件存放在。为了完成本关任务,你需要:跟踪系统调用的发生。此时,系统调用号存放在寄存器 eax 中。

lazbuyaotoutu的博客 2万+

《Head First Java》笔记

文章目录01 | Java基本概念02 | primitive主数据类型和引用 01 | Java基本概念 Java的工作方式 编写源代码party.java 执行javac来编译源代码,产生party.class 启动JVM来运行字节码文件,JVM会将字节码转换成平台能够理解的形式来运行。 关于while循环 不能使用如下错误代码: int i = 1; while(i){ .......... } while循环中只能接收boolean型结果,即接收true/false。

aLinxi的博客 649

【移动APP测试】Firebase Test Lab (FTL) 实战指南:从零搭建自动化测试流水线

本文详细介绍了Firebase Test Lab (FTL) 在移动APP测试中的实战应用,从零搭建自动化测试流水线。通过真实设备、虚拟设备和iOS设备的全面覆盖,FTL帮助开发者高效进行兼容性测试、性能监控和崩溃分析,显著提升应用质量。文章还提供了设备选择策略、成本控制技巧和CI/CD集成的最佳实践,助力团队优化测试流程。

weixin_29281915的博客 253

IO(四)

前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容   Serializable序列化 实例1:对象的序列化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

u012467492的专栏 356

百度飞桨EasyDL图像分类:收费口车辆类型自动识别

车辆类型识别在高速收费路口的应用中,场景相对单一且拍摄角度一致,因此首次训练模型效果优异,准确率达到了95%,鉴于市面上的车辆类型不断更新迭代且部分车辆的主要特征也不断发生变化,因此可在模型投入应用后,持续收集模型实际运行过中产生的数据,定期添加数据进行模型迭代,保证模型效果。企业将AI模型应用到实际场景中以实现停车费用、过路费用的自动计算,在收费口中由相机对每个车辆进行拍摄,拍摄到的图片传输到预测设备上进行类型识别,基于识别出来的车辆类型自动进行费用计算。该功能可在发起训练时选选择对应的开关打开即可。..

PaddlePaddle 1670

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2295

Go语言高级特性:错误处理与反射

在前文中,我们已经介绍了Go语言的结构体、接口和包管理等高级特性。在本文中,我们将深入探讨Go语言的错误处理机制和反射特性。这两个特性是Go语言中非常重要的高级特性,掌握它们将使你能够编写更加健壮、灵活和可扩展的Go程序。

欢迎来到智能安全前线!这里是AI与信息安全交汇之地。我们以代码为武器,深入大模型攻防实战,破解系统漏洞。追踪OpenAI、Meta前沿动态,用红蓝对抗思维,锻造智能时代的坚盾与利矛。 1061

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 282

学习 Python3 这一篇就够了

python的基础以及一些爬虫实战例子

Laptoy的博客 772

VMware ESXi 直通GPU

虚拟机需要独享GPU资源,那么就需要用到DirectPath I/O (直通),ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。注意,内存注意一定要勾选预留,否则开机后报错如下:无法打开虚拟机 win10 的电源。1.ESXi主机,管理,硬件,PCI设备,勾选GPU卡,切换直通,会提示要求重启主机,重启主机之后,该GPU设备直通一栏显示为“活动”。先确认虚拟机是否EFI引导:编辑虚拟机 - 虚拟机选项 - 引导选项 - 固件 - EFI。

liwension的博客 6293

Bash Shell 系统巡检脚本

部分安全相关检查需要root权限,建议通过sudo运行完整检查。

老韩的Linux云计算架构师进阶之路 94

Android序列化:Parcelable与Serializable深度对比

理解这些区别可以帮助您在Android开发中做出正确的序列化方案选择,平衡性能、开发效率和可维护性。使用@IgnoredOnParcel注解(AndroidX扩展)测试对象:包含15个字段的复杂对象序列化/反序列化1000次。是否需要持久化/网络传输?添加字段时在writeToParcel末尾写入新字段。读取时检查dataAvail()判断是否有新字段。:Parcelable显式指定字段读写顺序。直接不写入Parcel。:需手动处理字段增减。

斗锋在干嘛的博客 2961

TMS320F28377D双核开发例程 - DSP开发

首先,我们需要创建一个新的工程来进行开发。然后,选择适当的目标设备为TMS320F28377D,并设置工程的名称和存储位置。在上面的代码中,我们定义了一个128个元素的输入数组和输出数组。然后,我们使用一个简单的数字信号处理算法,将输入数组中的每个元素平方,并将结果存储到输出数组中。这个芯片的双核架构提供了更高的计算能力和灵活性,使得数字信号处理的开发更加高效和可靠。希望本文对您有所帮助!当应用程序在TMS320F28377D芯片上运行时,它将对输入数组中的每个元素进行平方运算,并将结果打印出来。

IfllUnity的博客 2517

2025 JSON性能巅峰对决:Jackson vs Gson压测报告与选型指南

你是否还在为JSON序列化性能瓶颈发愁?当服务日活突破百万级,一个毫秒级的序列化耗时差异可能导致每秒数千次的性能损耗。本文通过5组实战测试,揭示Jackson与Gson在不同场景下的性能表现,助你精准选择最适合项目的JSON处理库。读完本文你将获得: - 10万级数据吞吐量下的序列化/反序列化耗时对比 - 复杂嵌套对象场景的内存占用分析 - 零配置 vs 自定义配置的性能损耗比 - 生产环境最优依...

gitblog_00684的博客 523

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Scala学习笔记

我的原创地址:https://dongkelun.com/2018/12/14/scalaLearningNotes/ 前言 之前看Scala编程思想学习Scala,只看完了一半多,就没再继续深入学习,导致一些Scala基础知识还不知道,而且过去这么长时间了,之前学过的也遗忘了,所以这里主要记录自己学习Scala时容易遗忘的一些点,以备自己随时查看,增加记忆。这个主要给自己用,不定时更新添加~ 1...

主要分享大数据相关的知识,如Spark、Hudi 521

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java笔记,持续更新中包括java基础,web,各种框架,微服务框架,后续也会单独发布。

注意:长篇警告!!目前本笔记7w+字,且图片没能上传成功(懒得搞了)如果觉得有用可以私信我。本笔记为个人学习过程中记录,所学课程均来自网络公开课,笔记内容如有错误欢迎指正。本笔记仅供个人学习使用,转载请联系私信本人。

顾若茵的博客 510

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java面试汇总+答案

本文转载,只是加了目录方便阅读,原文链接:https://blog.youkuaiyun.com/qq_18298439/article/details/80939968 目录1.面向对象和面向过程的区别2.Java的四个基本特性(抽象、封装、继承,多态)3.重载和重写的区别4.构造器Constructor是否可被override5.访问控制符public,protected,private,以及默认的区别6.是否可以继承String类7.String和StringBuffer、StringBuilder的区别8.ha

橘生淮南 1376

Java基础

JAVA后端面试题<JAVA基础> 1.JDK和JRE有什么区别? JDK: JAVA Development Kit的简称,JAVA开发工具包,包括了JAVA的开发环境和运行环境(JRE)。 JRE: JAVA Runtime Environment的简称,JAVA运行环境。 两者关系: JDK包含JRE,同时还包含了JAVA源码编译器 JAVAC,还包含了JAVA程序调试和分析的.........

weixin_43766298的博客 758

视频教程-JAVA面向对象高级编程-Java

JAVA面向对象高级编程 主要研究方向为J2EE、.net 、数据库 、前端...

weixin_30821229的博客 250

8 个必备的PHP功能开发

1、传递任意数量的函数参数    我们在.NET或者JAVA编程中,一般函数参数个数都是固定的,但是PHP允许你使用任意个数的参数。下面这个示例向你展示了PHP函数的默认参数:    01.// 两个默认参数的函数   02.function foo($arg1 = ”, $arg2 = ”) {   03.echo “arg1: $arg1\n”;  

lanse_my的专栏 939

非常全面的 JavaSE 知识点总结

文章目录1.你使用过的JDK版本有哪些?2.面试题或者考试题:JAVA_HOME,Path和ClassPath的区别?3.java数据类型分为几类几种4.&&和&的区别?||与|的区别?5.前++和后++的区别?前--和后--的区别?6.质数【编程题】7.while与do-while的区别?8.break,continue,return三者的区别?9.switch支持的数据类型有哪些?10.数组的定义方式有哪些?11.冒泡排序【编程题】12.面向对象三大特征13.static关键字1

Li_Jian_Hui_的博客 1万+
上一篇: 【Java高级特性】java学习之旅32-日期日历类
下一篇: 【Java高级特性】java学习之旅35-多线程
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值