序列化:需实现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();
}
}
}
}
}
注意:反序列化的顺序需与写入顺序一致