JAVA--IO:对象流(ObjectInputStream、ObjectOutputStream)

目录

 

对象流与序列化

常用方法

示例


对象流与序列化

对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 。

ObjectOutputStream将Java 对象的基本数据类型和图形写入 OutputStream。可以使用ObjectInputStream读取(重构)对象。通过在流中使用文件可以实现对象的持久存储

一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口

类通过实现 java.io.Serializable 接口以启用其序列化功能。实现 Serializable 接口允许对象序列化,以保存和恢复对象的全部状态,并且允许类在写入流时的状态和从流读取时的状态之间变化。它自动遍历对象之间的引用,保存和恢复全部图形。

常用方法

ObjectInputStream:Object readObject():从 ObjectInputStream 读取对象。

ObjectInputStream(InputStream in):创建从指定 InputStream 读取的 ObjectInputStream。

ObjectOutputStream:void writeObject(Object obj):将指定的对象写入 ObjectOutputStream。

ObjectOutputStream(OutputStream out):创建写入指定 OutputStream 的 ObjectOutputStream。

示例

import java.io.*;
class Person implements Serializable{	// 标识接口
	
	public static final long serialVersionUID=42L;	// 固定标识
	
	private String name;
	transient int age;	// transient关键字使堆内存中的变量不能被序列化
	static String country="cn";	// 静态不能被序列化,它不在堆内存中
	
	Person(String name,int age,String country){
		this.name=name;
		this.age=age;
		this.country=country;
	}
	
	public String toString(){
		return name+":"+age+":"+country;
	}
}



/*
ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

ObjectInputStream:Object readObject():从 ObjectInputStream 读取对象。
ObjectInputStream(InputStream in):创建从指定 InputStream 读取的 ObjectInputStream。 
ObjectOutputStream:void writeObject(Object obj):将指定的对象写入 ObjectOutputStream。 
ObjectOutputStream(OutputStream out):创建写入指定 OutputStream 的 ObjectOutputStream。
*/
import java.io.*;
class ObjectStreamDemo{
	
	public static void main(String[] args)throws Exception{
		// writeObj();
		readObj();
	}
	
	public static void readObj()throws Exception{
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt"));	// 一般存储为"类名.object"文件
		
		Person p=(Person)ois.readObject();
		
		System.out.println(p);
		
		ois.close();
	}
	
	public static void writeObj()throws Exception{
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt"));	// 一般存储为"类名.object"文件
		
		oos.writeObject(new Person("lisi0",399,"kr"));	// 在Person类中使用了transient、static关键字使age与country不能被序列化。
		
		oos.close();
	}
	
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值