对象流序列号与反序列号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /* 序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream */ @Test public void test5() throws IOException { FileOutputStream fos = new FileOutputStream( "hello.dat" ); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeUTF( "java学习中" ); oos.flush(); //刷新操作 oos.writeObject( new Person( "张三" , 20 )); oos.flush(); oos.close(); } /* 反序列化:将磁盘文件中的对象还原为内存中的一个java对象 使用ObjectInputStream */ @Test public void test6() throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream( "hello.dat" ); ObjectInputStream ois = new ObjectInputStream(fis); Object o = ois.readUTF(); Object o1 = ois.readObject(); String str = (String)o; System.out.println(str); System.out.println(o1); ois.close(); } |
Person类序列化需要满足以下条件:
1.需要实现接口Serializable
2.当前类提供一个常量:serialVersionUID
3.除了当前Person类需要实现Serializable 接口之外,还必须保证其内部的所有属性也必须是可序列号的(默认情况下,基本数据类型可序列号)
1 | ObjectOutputStream 、ObjectInputStream 不能序列化 static 和 transient 修饰的成员变量 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Person implements Serializable { private static final long serialVersionUID = -68494470754667710L; private String name; private int age; public Person(String name, int age) { this .name = name; this .age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\ '' + ", age=" + age + '}' ; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律