java序列化与反序列化

序列化:需实现Serializable接口或父类实现Serializable接口,接口中没有需要实现的方法,代表一个标记,对象可以被序列化,一般推荐生成serialVersionUID,在不生成的情况下可能会导致读写序列化id不一致的情况。在序列化后对象可以通过流的方式存储在网络、文件、数据库中,类的属性被static关键字修饰的情况,不参与序列化,因为静态的不依赖于对象,或者属性被transient关键字修饰的情况下也不会序列化,对象在不序列化的情况下,当对象长时间没被引用的情况下,那对象就成了垃圾对象,满足一定算法时,jvm会把对象当成垃圾对象进行处理,序列化也就是对象转换成字节过程
特性对象在序列化后,对象可以进行持久性存储
在这里插入图片描述
代码如下:
package com.io;

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.io.Serializable;
import java.util.Date;

public class TestObject {

public static void main(String[] args) {
	objectWriter();
}

private static void objectWriter() {
	ObjectOutputStream oo = null;
	try {
		oo = new ObjectOutputStream(new FileOutputStream("d.txt"));
		oo.writeObject(new Date());
		oo.writeInt(1);
		oo.writeObject(new Dog("二哈", 5));
		oo.writeUTF("测试");
		oo.flush();
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		if (oo != null) {
			try {
				oo.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

}
// 创建Dog类实现Serializable接口

class Dog implements Serializable {
// 生成序列化id
private static final long serialVersionUID = 1L;
// 静态的不想被序列化
static int id;
private String name;
private transient int age;

public Dog(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}

@Override
public String toString() {
	return "Dog [name=" + name + "]";
}

}

反序列化字节序列过程转化成对象
代码如下
public static void objectRead() {
ObjectInputStream oi = null;
try {
oi = new ObjectInputStream(new FileInputStream(“d.txt”));
Date data = (Date) oi.readObject();
System.out.println(data);
int num = oi.readInt();
System.out.println(num);
Dog dog = (Dog) oi.readObject();
System.out.println(dog);
String str = oi.readUTF();
System.out.println(str);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (oi != null) {
try {
oi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
注意:反序列化的顺序需与写入顺序一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值