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

做装饰画的行业网站最近的电脑培训班在哪里

做装饰画的行业网站,最近的电脑培训班在哪里,wordpress 管理文件,网页制作与网站建设技术大全 下载va 实现序列化与反序列化 序列化(Serialization) 是将 Java 对象转换为字节流(二进制数据),以便存储或网络传输。 反序列化(Deserialization) 则是将字节流恢复为 Java 对象。 Java 提供了 ja…

va 实现序列化与反序列化

序列化(Serialization) 是将 Java 对象转换为字节流(二进制数据),以便存储或网络传输。
反序列化(Deserialization) 则是将字节流恢复为 Java 对象。

Java 提供了 java.io.Serializable 接口来实现对象的序列化与反序列化。


1. 基本实现步骤

(1) 定义可序列化的类

类必须实现 Serializable 接口(标记接口,无方法)。

java

复制

下载

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;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}

(2) 序列化(Object → 字节流)

使用 ObjectOutputStream 将对象写入文件或网络流。

java

复制

下载

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;public class SerializationExample {public static void main(String[] args) {Person person = new Person("Alice", 25);try (FileOutputStream fileOut = new FileOutputStream("person.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut)) {out.writeObject(person); // 序列化System.out.println("对象已序列化并保存到 person.ser");} catch (Exception e) {e.printStackTrace();}}
}

(3) 反序列化(字节流 → Object)

使用 ObjectInputStream 从文件或网络流读取对象。

java

复制

下载

import java.io.FileInputStream;
import java.io.ObjectInputStream;public class DeserializationExample {public static void main(String[] args) {try (FileInputStream fileIn = new FileInputStream("person.ser");ObjectInputStream in = new ObjectInputStream(fileIn)) {Person person = (Person) in.readObject(); // 反序列化System.out.println("反序列化结果: " + person);} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

复制

下载

反序列化结果: Person{name='Alice', age=25}

2. 进阶用法

(1) serialVersionUID(版本控制)

  • 用于确保序列化/反序列化的类版本一致,避免 InvalidClassException

  • 如果类结构发生变化(如新增字段),但 serialVersionUID 不变,仍可兼容旧数据。

java

复制

下载

public class Person implements Serializable {private static final long serialVersionUID = 1L;  // 手动指定版本号private String name;private int age;// ...
}

(2) transient 关键字(禁止序列化字段)

java

复制

下载

public class Person implements Serializable {private String name;private transient int age;  // 该字段不会被序列化// ...
}
  • 反序列化时,transient 字段会恢复默认值(如 int → 0String → null)。

(3) 自定义序列化(writeObject 和 readObject

java

复制

下载

private void writeObject(ObjectOutputStream out) throws IOException {out.defaultWriteObject();  // 默认序列化out.writeInt(age * 2);    // 自定义处理(如加密)
}private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {in.defaultReadObject();   // 默认反序列化this.age = in.readInt() / 2;  // 自定义处理(如解密)
}

3. 常见问题

Q1: 哪些对象可以被序列化?

  • 基本类型(intStringList 等)和实现了 Serializable 的类。

  • static 字段不会被序列化(属于类,而非对象)。

Q2: 序列化后的文件内容可读吗?

  • 是二进制格式,不可直接阅读,但可用 hexdump 或 xxd 查看。

  • 若需可读格式,可用 JSON(Gson/Jackson) 或 XML(JAXB) 替代。

Q3: 序列化安全吗?

  • 不安全,二进制数据可能被篡改。

  • 若需安全传输,可结合 加密(AES) 或 签名(RSA)


4. 替代方案(JSON/XML 序列化)

(1) 使用 Gson(Google)

java

复制

下载

import com.google.gson.Gson;public class GsonExample {public static void main(String[] args) {Person person = new Person("Bob", 30);Gson gson = new Gson();// 序列化(Object → JSON)String json = gson.toJson(person);System.out.println("JSON: " + json);  // {"name":"Bob","age":30}// 反序列化(JSON → Object)Person newPerson = gson.fromJson(json, Person.class);System.out.println("Object: " + newPerson);}
}

(2) 使用 Jackson

java

复制

下载

import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonExample {public static void main(String[] args) throws Exception {Person person = new Person("Charlie", 40);ObjectMapper mapper = new ObjectMapper();// 序列化(Object → JSON)String json = mapper.writeValueAsString(person);System.out.println("JSON: " + json);// 反序列化(JSON → Object)Person newPerson = mapper.readValue(json, Person.class);System.out.println("Object: " + newPerson);}
}

总结

方式特点适用场景
Java 原生序列化二进制格式,高效,但不可读本地存储、RMI
JSON(Gson/Jackson)可读性强,跨语言兼容REST API、配置文件
XML(JAXB)结构化强,但冗长旧系统、SOAP

推荐:

  • 优先用 JSON(易读、跨语言)。

  • 若需高性能存储,用 Java 原生序列化

  • 避免序列化敏感数据(如密码),或使用加密。

http://www.dtcms.com/wzjs/450847.html

相关文章:

  • 个人网站设计界面跨境网站建站
  • 甘孜建设机械网站首页谷歌seo是什么意思
  • 网站设计与开发技术教程百度ocpc怎么优化
  • 重庆点优建设网站公司seo课堂
  • 网站建设代理招标营销推广48个方法
  • 网络设计有哪些怎么做seo网站关键词优化
  • 做网站定金要多少国内重大新闻
  • 独立网站商城怎么做微商软文大全
  • 部队网站建设个人在线网站推广
  • 沈阳哪家做网站好自建网站平台有哪些
  • 化妆品网站建设目标网络营销评价的名词解释
  • 网站后台空间30g要多少钱关键词三年级
  • 网站优化的目的网店推广常用的方法
  • 政府部门网站建设简讯深圳百度推广开户
  • 企业专业网站设计公鞍山seo优化
  • 进入公众号平台优化设计电子版在哪找
  • 站群管理系统网络营销服务的特点
  • 建设摩托车官网专卖店股票发行ipo和seo是什么意思
  • 台州企业自助建站免费的网络推广平台
  • b2c网站开发东莞有哪些做推广的网站
  • 烟台网站建设服务2022智慧树互联网与营销创新
  • 网站开发毕设任务书微信crm客户管理系统
  • 集团网站设计方案2022最新引流推广平台
  • 自助网站建设h5制作网站
  • eclipse与jsp网站开发深圳seo优化公司排名
  • 做的网站怎样评估价值如何在百度发布短视频
  • 绵阳建设网站十大网站管理系统
  • 开网站需要准备什么外贸订单一般在哪个平台接
  • 沂水做网站企业广告宣传
  • 出口跨境电子商务seo诊断的网络问题