当前位置: 首页 > news >正文

【问题】java序列化,什么时候使用

文章目录

  • 是什么
  • 为什么
  • 如何做
    • 流操作
  • 注事事项

是什么

把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
  1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2)在网络上传送对象的字节序列。

为什么

一般来说如果你的对象需要网络传输或者持久化 (对象直接转换为字节的形式传输),那么就需要实现Serializable接口。比如远程方法调RPC (Remote Procedure Call) 则接口参数就一定要实现Serializable接口;如果只是转换为json字符串的形式与网络打交道,那么就不需要实现Serializable接口。
持久化数据库,rpc调用外部接口,网络通信时候。
这几种情况需要实现serialliable接口,转换JSON不需要实现接口

如何做

流操作

  /*** 序列化操作*/public static void serialize() {String targetFile = PATH_PREFIX.concat("user.txt");try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File(targetFile)))) {UserDomain userDomain = UserDomain.builder().userName("小明").address("123@163.com").build();objectOutputStream.writeObject(userDomain);} catch (IOException e) {log.error("e : 【{}】", e);throw new RuntimeException(e);}log.info("【序列化结束,生成文件user.txt】");}/*** 反序列化** @return*/public static UserDomain deserialize() {String targetFile = PATH_PREFIX.concat("user.txt");UserDomain user = null;try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File(targetFile)))) {user = (UserDomain) inputStream.readObject();} catch (IOException | ClassNotFoundException e) {log.error("e : 【{}】", e);throw new RuntimeException(e);}log.info("【反序列化结束】");return user;}/*** 序列化操作*/@Testpublic void testSerialization(){FileUtil.serialize();UserDomain user = FileUtil.deserialize();log.info("user : [{}]" , user);}

16:10:08.019 [main] INFO com.geekmice.springbootselfexercise.NoDaoTest - user : [UserDomain(id=null, userName=小明, birthday=null, sex=null, address=123@163.com)]

注事事项

http://www.lryc.cn/news/132760.html

相关文章:

  • 【最新可用】VMware中ubuntu与主机window之间使用共享文件夹传输大文件
  • A. Two Semiknights Meet
  • 〔011〕Stable Diffusion 之 解决绘制多人或面部很小的人物时面部崩坏问题 篇
  • 在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问
  • Vue elementui 实现表格selection的默认勾选,翻页记录勾选状态
  • CloudCompare——统计滤波
  • nodejs+vue古诗词在线测试管理系统
  • 174-地下城游戏
  • Linux定时任务crontab
  • golang字符串切片去重
  • git如何检查和修改忽略文件和忽略规则
  • Android AppCompatActivity标题栏操作
  • 解决conda activate报错
  • FreeMarker--表达式和运算符的用法(全面/有示例)
  • 设计模式 -- 策略模式(传统面向对象与JavaScript 的对比实现)
  • 非常详细的 Ceph 介绍、原理、架构
  • js 的正则表达式(二)
  • 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来
  • Visual Studio 2022 你必须知道的实用调试技巧
  • Webgl 存储限定符attribute、gl.getAttribLocation、gl.vertexAttrib3f及其同族函数和矢量版本的介绍
  • postgresql跨库创建视图
  • FPGA时钟
  • FifthOne:计算机视觉提示和技巧
  • Oracle19c-补丁升级报错合集(一)
  • 嵌入式:ARM Day6
  • ClickHouse安装步骤
  • Android CCodec (二十) CCodec Native服务实现分析
  • Shell编程学习之while循环语句和for循环语句的应用
  • 【校招VIP】CSS校招考点之选择器优先级
  • Netty+springboot开发即时通讯系统笔记(四)终