Serializable Interface in Java(序列化)

Serializable 接口位于 java.io包中。它是一个标记接口(marker interface)。标记接口没有任何方法(method)和字段(field)。

当有些类(class)希望它们的实例(instance)被序列化(Serialized)或反序列化(Deserialized),则这些类需要继承(implement)该接口。序列化是一种将对象的状态转换为字节流的机制。序列化需要使用ObjectOutputStream。反序列化则是在内存中使用字节流重新创建实际Java对象的反过程。这种机制可用于持久化对象。反序列化需要使用ObjectInputStream

因此,它可以有效地将对象的状态保存到文件中。
声明:

public interface Serializable

ObjectOutputStream中的writeObject()方法可以序列化对象。
声明:

public final void writeObject(Object obj)
                       throws IOException

ObjectInputStreamreadObject()方法可以用来反序列化对象。
声明:

public final Object readObject()
                  throws IOException,
               ClassNotFoundException

示例一:

// Java Program to demonstrate a class
// implementing Serializable interface

import java.io.Serializable;

public static class Student implements Serializable {
	public String name = null;
	public String dept = null;
	public int id = 0;
}

可以看到Student类实现了Serializable接口,但是没有从Serializable接口实现任何方法。

示例二:

// Java program to illustrate Serializable interface
import java.io.*;

// By implementing Serializable interface
// we make sure that state of instances of class A
// can be saved in a file.
class A implements Serializable {
	int i;
	String s;

	// A class constructor
	public A(int i, String s)
	{
		this.i = i;
		this.s = s;
	}
}

public class Test {
	public static void main(String[] args)
		throws IOException, ClassNotFoundException
	{
		A a = new A(20, "Serializable");

		// Serializing 'a'
		FileOutputStream fos
			= new FileOutputStream("xyz.txt");
		ObjectOutputStream oos
			= new ObjectOutputStream(fos);
		oos.writeObject(a);

		// De-serializing 'a'
		FileInputStream fis
			= new FileInputStream("xyz.txt");
		ObjectInputStream ois = new ObjectInputStream(fis);
		A b = (A)ois.readObject(); // down-casting object

		System.out.println(b.i + " " + b.s);

		// closing streams
		oos.close();
		ois.close();
	}
}

输出结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Balaaam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值