java中的对象序列化

有时我们需要保存对象,以便进一步地操作,这便用到了对象序列化。

对象序列化基本概念

所谓的对象序列化(串行化),是指在内存中保存的对象转化为二进制数据流的形式的一种操作。通过将对象序列化,可以方便地实现对象的传输及保存。 但是在java之中并不是所有的类的对象都可以被序列化,如果一个类对象需要被序列化,则此类一定要实现java.io.Serializable接口。但是这个接口里面没有定义任何的方法,所以此接口依然属于标识接口,表示一种能力。

在java中提供有ObjectInputStream和ObjectOutputStream这两个类用于序列化对象的操作,它们是用于存储和读取对象的输入输出流类,帮助开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Serialized接口。

对象序列化使用范例:

package test;

import java.io.Serializable;

public class Student implements Serializable{
	private String name;
	private int age;
	public Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	@Override
	public String toString() {
		return "姓名=" + name + ", 年龄=" + age ;
	}
	
}

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream; 

public class SerializableDemo {
	public static void main(String[] args) throws Exception {
		File f=new File("SerializedStudent");
		serialize(f);
		deserialize(f);
	}
	public static void serialize(File f) throws Exception{
		OutputStream outputFile=new FileOutputStream(f);
		ObjectOutputStream cout=new ObjectOutputStream(outputFile);
		cout.writeObject(new Student("张三",25));
		cout.close();
	}
	public static void deserialize(File f) throws Exception{
		InputStream inputFile=new FileInputStream(f);
		ObjectInputStream cin=new ObjectInputStream(inputFile);
		Student s=(Student) cin.readObject();
		System.out.println(s);
		cin.close();
	}
}

对象输出流——ObjectOutputStream
虽然类已经实现了Serializable接口,但如果要想真正地实现具体的序列化操作,则用户可以使用ObjectOutputStream类。

这个类继承结构如下:
java.lang.Object
-java.io.OutputStream
----java.io.ObjectOutputStream

由上看出,ObjectOutputStream是OutputStream的子类

OutputStream outputFile=new FileOutputStream(new File(“SerializedStudent”));
ObjectOutputStream cout=new ObjectOutputStream(outputFile);
cout.writeObject(new Student(“张三”,25));
cout.close();

ObjectOutputStream接收一个OutputStream对象用于保存待序列化的对象,然后cout调用writeObject方法保存对象。

对象输入流——ObjectInputStream
如果希望将已被序列化的对象再反序列化回来,则可以通过ObjectInputStream类完成,它用于读取将序列化对象。

这个类继承结构如下:
java.lang.Object
-java.io.InputStream
----java.io.ObjectInputStream

InputStream inputFile=new FileInputStream(new File(“SerializedStudent”));
ObjectInputStream cin=new ObjectInputStream(inputFile);
Student s=(Student)cin.readObject();
System.out.println(s);
cin.close();

ObjectInputStream接受一个InputStream对象用于保存待序列化的对象。然后cin调用readObject方法读取序列化后的对象。

在日后的实际开发中,这些序列化和反序列化的功能会由相关的容器完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值