BigDataJava基础_ObjectOutputStream与ObjectInputStream实现序列化与反序列化
Posted 奔跑的金鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BigDataJava基础_ObjectOutputStream与ObjectInputStream实现序列化与反序列化相关的知识,希望对你有一定的参考价值。
1.概念
ObjectOutputStream用于序列化
ObjectOutputStream用于反序列化
所谓的序列化,其实就是将对象转化为二进制
举个例子说明:
例如,我在京东上买了一张木床,京东发货的时候,肯定不会给我发一张已经拼接好的木床,因为这样不方便运输,那么快递公司会将床先拆开,然后附上安装说明书,这就叫做序列化,等我拿到床的时候,我再把床按照说明书组装起来,这就叫做反序列化。
2.代码案例
2.1 简单对象的序列化与反序列化
文件1:User.java 一个存储用户信息的java类
package cn.test.logan.day10; import java.io.Serializable; public class User implements Serializable { String id; String name; float sal; String addr; public User(){ } public User(String id, String name, float sal, String addr) { super(); this.id = id; this.name = name; this.sal = sal; this.addr = addr; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSal() { return sal; } public void setSal(float age) { this.sal = sal; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } @Override public String toString() { return "[id=" + id + ", name=" + name + ", sal=" + sal + ", addr=" + addr + "]"; } }
文件2:ObjectOutputStreamDemo.java 将对象序列化后写入文件
package cn.test.logan.day10; import java.io.FileOutputStream; import java.io.ObjectOutputStream; /** * 对象输出流 * @author QIN * */ public class ObjectOutputStreamDemo { public static void main(String[] args) throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/obj_out.obj")); User u1 = new User("001","范闲",10000f,"China"); User u2 = new User("002","范健",20000f,"China"); // 前提是类user是可序列化的 oos.writeObject(u1); oos.writeObject(u2); oos.close(); } }
文件3:ObjectInputStreamDemo.java 将对象反序列化
package cn.test.logan.day10; import java.io.FileInputStream; import java.io.ObjectInputStream; public class ObjectInputStreamDemo { public static void main(String[] args) throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:/obj_out.obj")); User u1 = (User)ois.readObject(); User u2 = (User)ois.readObject(); System.out.println(u1); System.out.println(u2);
ois.close(); } }
2.2 复杂对象的序列化与反序列化
2.2.1 ArrayList进行序列化与反序列化
类还是沿用2.1中的User类(注意,必须是可序列化类)
package cn.test.logan.day10; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; /** * 将ArrayList序列化与反序列化 * @author QIN * */ public class ObjectStreamDemo { public static void main(String[] args) throws Exception { // 创建对象 User u1 = new User("A01","若若",2800f,"庆国"); User u2 = new User("A02","朵朵",3800f,"齐国"); // 新建ArrayList ArrayList<User> uList = new ArrayList<>(); // 对象存入到ArrayList中 uList.add(u1); uList.add(u2); // 将数据存入文件:序列化 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:/user.list")); oos.writeObject(uList); oos.close(); // 将存入的数据取出来:反序列化 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:/user.list")); // 强转型 ArrayList<User> UserList = (ArrayList<User>) ois.readObject(); System.out.println(UserList); } }
2.2.1 HashMap进行序列化与反序列化
package cn.test.logan.day10; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; /** * 将HashMap序列化与反序列化 * @author QIN * */ public class ObjectStreamDemo2 { public static void main(String[] args) throws Exception { // 创建对象 User u1 = new User("A01","若若",2800f,"庆国"); User u2 = new User("A02","朵朵",3800f,"齐国"); //创建map HashMap<String, User> umap = new HashMap<>(); umap.put(u1.getName(), u1); umap.put(u2.getName(), u2); // 将数据存入文件:序列化 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:/user.list")); oos.writeObject(umap); oos.close(); // 将存入的数据取出来:反序列化 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:/user.list")); HashMap<String, User> usermap = (HashMap<String, User> )ois.readObject(); System.out.println(usermap);
ois.close(); } }
以上是关于BigDataJava基础_ObjectOutputStream与ObjectInputStream实现序列化与反序列化的主要内容,如果未能解决你的问题,请参考以下文章
BigDataJava基础_FileOutputStream写入文件