java序列化 教程
序列化的 条件:
序列化必须要满足两个条件:
1. 该对象必须实现 java.io.Serializble 接口
2. 改对象的所有属性必须是可序列化的,若有属性不可序列化也须注明是短暂的
注:检验一个类是否可以被序列化,可以检验该类是否实现 Serializble 接口
序列化的定义:
把对象转换成可传输的字节序列的过程
反序列化的定义:
把字节序列转还原对象的过程
为什么要序列化?
最终目的地为了 跨平台存储 和 进行网络传输 而进行网络传输都是 IO 而进行IO所支持的还是 数组
序列化实例:
定义 student 类 并 实现了 java.io.Serializble 接口
public class studentDemo implements java.io.Serializable { public String name; public int phone; public String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPhone() { return phone; } public void setPhone(int phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
------序列化------
序列化成功之后会在当前路径创建 以 “张三”名字 为文件名的 .ser 的文件
序列化 需要用到 FileOutputStream() 文件输出流 和 ObjectOutputStream() 对象输出流
使用 文件输出流 创建 文件路径和名称 再通过 对象流的 writeObjec()方法 写入到系统中
每次使用完 IO流 一定要记得 关闭流 close() 方法
public class SerializeDemo { public static void main(String[] args) { studentDemo stu = new studentDemo(); stu.setName("张三"); stu.setPhone( 1233467733 ); stu.setAddress("江西"); try { FileOutputStream fileOut = new FileOutputStream("student" + stu.name + ".ser"); // 创建 文件路径、文件名字 ObjectOutputStream out = new ObjectOutputStream(fileOut); // 创建 对象输出流系统 out.writeObject( stu ); // 写入需要的对象名 fileOut.close(); // 关闭文件流 out.close(); // 关闭对象输入流 System.out.println( "---序列化对象成功---" ); } catch ( IOException e) { e.printStackTrace(); // 出现异常 初始化try } } }
-------反序列化-------
反序列化是将 序列化的文件的内容读取出来的过程,和序列化是相对的
需要使用到 FileInputStream() 文件输入流 和 ObjectInputStream() 对象输入流 再用对象流的 readObject() 读取文件中的内容
public class UnSerializble { public static void main(String[] args) { String name = "张三"; try { FileInputStream fileInt = new FileInputStream("student" + name + ".ser"); // 创建文件输入流 ObjectInputStream ois = new ObjectInputStream( fileInt ); // 创建对象输入流 studentDemo stu = (studentDemo) ois.readObject(); // 读取的对象强制成为 studentDemo 类 System.out.println("---反序列化内容---"); System.out.println( "name:" + stu.getName() ); System.out.println( "phone:" + stu.getPhone()); System.out.println( "address:" + stu.getAddress()); fileInt.close(); ois.close(); } catch (IOException e) { throw new RuntimeException(e); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } }
本文来自博客园,作者:萧熙,转载请注明原文链接:https://www.cnblogs.com/xiaoxiblog/p/17180549.html