【BigData】Java基础_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(); } }
作者:奔跑的金鱼
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!