使用场景:
把Java对象保存到文件(比如游戏存档)
网络传输对象(比如发送一个User对象)
java 序列化和反序列化步骤
序列化 (对象-------->文件)
1.要序列化的类实现 Serializable 标记接口
public class T implements Serializable{.......}
2.创建对象并赋值,初始化待序列化的对象,填充数据。
T t = new T(); t.属性=...;
3. **创建 ObjectOutputStream**
绑定到目标文件(如 ObjectIO.dat)。
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ObjectIO.dat"));
4.写入对象到文件
通过 writeObject() 方法序列化对象。
oos.writeObject(user); // 确保写入的是目标对象(如 user)
关闭资源
调用 flush() 强制写入数据,并关闭流释放资源
oos.flush();
oos.close();
二、反序列化(文件 → 对象)
1.**创建 ObjectInputStream**
绑定到序列化文件。
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("ObjectIO.dat"));
2.读取对象并强制类型转换
通过 readObject() 读取字节流,并转换为原始类型(如 T)。
T t = (t)ois.readObject();
3.使用恢复后的对象
直接访问反序列化对象的属性或方法。
System.out.println(t.name);
4.关闭资源
确保关闭输入流。
ois.close();
demo:
import java.io.*;
public class TestObjectStreamDemoA {
public static void main(String[] args) {
// TODO Auto-generated method stub
User user = new User();
user.name="张三";
user.age=25;
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ObjectIO.dat"));
oos.writeObject(user);
oos.flush();
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("ObjectIO.dat"));
User u = (User)ois.readObject();
String s= u.name;
System.out.println(s);
ois.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
class User implements Serializable{
String name;
int age;
}