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

Java-实例-序列化与反序列化(Serializable)

理解(Serializable

序列化---将对象状态转换为字节流,以便存储或传输。
序列化是"冻结"对象,反序列化是"解冻"对象

想让一个对象可序列化,其类必须实现java.io.Serializable接口。这个接口没有任何方法,只起标记作用,告诉JVM这个类的对象允许被序列化。

在Android中,进行序列化主要有两种选择:Java原生的Serializable和Android专属的Parcelable

它们最核心的区别在于设计初衷和应用场景

  • Serializable:是Java的标准接口,使用简单,但效率较低,适合持久化存储(存文件)或网络传输-2-8-11。

  • Parcelable:是Android特有的接口,实现稍复杂,但性能极高,专为内存间的高效数据传输而设计,是Android组件间通信(如IntentBinder跨进程通信)的首选

实例

将对象person转换为字节流,存储在工程target文件夹中。

调用

Person person = new Person("九股烟", 20); byte[] bytes0 = serialize(person); // 序列化:将对象保存到文件 save(bytes0); //保存 byte[] bytes1= read(); //读出 Person p = deserialize(bytes1); // 反序列化:从文件恢复对象 System.out.println("反序列化(对象)= " + p.toString());

功能函数

// =============================================================== // 1. 序列化:对象 → 字节数组 // =============================================================== public static byte[] serialize(Person person) { try ( ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos)) { oos.writeObject(person); oos.flush(); return baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); return null; } } // =============================================================== // 2. 反序列化:字节数组 → 对象 // =============================================================== public static Person deserialize(byte[] bytes) { if (bytes == null || bytes.length == 0) {return null;} try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais)) { return (Person) ois.readObject(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } } String targetDir = "target/"; String fileName = "path_bytes.km"; // =============================================================== // 3. 保存:字节数组 → 文件 // =============================================================== public void save(byte[] data) { try { // 确保target目录存在 File file = new File(targetDir, fileName); file.getParentFile().mkdirs();// 确保target目录存在 try (FileOutputStream fos = new FileOutputStream(file)) { fos.write(data); System.out.println("保存成功: " + file.getAbsolutePath()); System.out.println("数据大小: " + data.length + " 字节"); } } catch (IOException e) { e.printStackTrace(); } } // =============================================================== // 4. 读取:文件 → 字节数组 // =============================================================== public byte[] read() { File file = new File(targetDir, fileName); file.getParentFile().mkdirs();// 确保target目录存在 if (!file.exists()) {return null;} try (FileInputStream fis = new FileInputStream(file)) { byte[] data = new byte[(int) file.length()]; fis.read(data); System.out.println("读取成功: " + file.getAbsolutePath()); System.out.println("数据大小: " + data.length + " 字节"); return data; } catch (IOException e) { e.printStackTrace(); return null; } }

Person.java 接口Serializable

import java.io.Serializable; public class Person implements 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 void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name ='" + name + '\'' + ", age =" + age + '}'; } }
http://www.jsqmd.com/news/1394563/

相关文章:

  • 豆包生成 亚马逊链接的视频
  • 2026物流园区公卫换套马桶代工厂选型全指南:正规服务商盘点、合作避坑FAQ及场景适配方案详解 - 产业观察报
  • 零基础学AI建模怎么择校?多家主流游戏建模机构真实测评汇总 - 生活动态圈
  • 从WebShell到内网渗透:新手必学的安全进阶之路
  • 2026文职培训深度指南|哪家机构更靠谱?有用滴教育成备考首选 - 资讯报道
  • 2026年充电桩销量排名:驴充充全场景覆盖跻身前五,下沉市场与社区充电部署量领跑
  • 2026西藏包车游旅行社哪家靠谱?司机全是退伍军人,16年未出事故 - zhongxing1
  • MCP 如何做指纹浏览器环境回归检查:从检查清单到异常记录
  • 深度解析印花PVC地胶:核心技术与商用场景应用 - 汇聚至此
  • 双流卷积网络:当深度学习第一次在视频动作识别上打败了手工特征
  • 动态配气仪原理详解
  • 如何筛选靠谱川西旅行社?从车辆、住宿拆解跟团避坑逻辑 - 资讯报道
  • Biotin SNA 应用于石蜡切片 α‑2,6 唾液酸化糖链原位示踪检测方案研究
  • Fnet 云网安 260813
  • 学习24
  • 2026年上海GEO代运营选型全指南 中小微企业决策参考 - 筑云鲸
  • 知识产权管理平台的核心能力:官文自动归档与案件状态智能更新
  • 员工福利平台有哪些?企业选型参考 - 资讯报道
  • 丹美医疗国产替代进展如何
  • 家居科普|从人体工学角度聊聊:腰突与腰肌劳损,床垫软硬该如何抉择
  • 佛山热门热收缩包装机供应商,双诚智能表现如何?
  • 纯色PVC地胶厂家常见问题解答(2026专家版) - 汇聚至此
  • 39.8 元巴马水模式拆解 新零售系统开发
  • 2027北京AI数字健康与智慧医疗展官方:药企闭门对接专场开放
  • 硬件采集+云端建档+智能干预,落地可感知的企业健康福利体系
  • 章丘产业带技术观察:罗茨风机厂商资质背后的品控差异 - 资讯报道
  • 企业级AI框架怎么选,Java团队该盯住哪几个硬指标
  • 2026 年更新:义县有实力的地坪下沉施工队选哪家,小区楼下的那片空地,原来藏着这么容易被忽略的安全隐患? - 行业推荐官【认证】
  • 零基础入门python06:把重复代码变成函数——商品结算器
  • 2026年新经济领域互联网求职软件选型指南:3款口碑合规平台盘点+中高端人才适配分析+求职避坑FAQ - 行业观察网