I/O(四)ObjectStream

当我们创建了一个model对象的时候,必须每次要给它set进去值之后才能取里面的值,那么我们想能不能只Set一次值,将这个对象持久化一下,不用每次Set就可以得到值呢。当然可以,这就要把对象用对象流ObjectStream,以I/O的方式写到文件中,然后再读取,就实现了对象的可持久化。

public class TestObjectStream {

//文件中写对象

public static void writeObject(Object o) throws Exception{

OutputStream out=new FileOutputStream("c:\\1.txt");

ObjectOutputStream oos=new ObjectOutputStream(out);

oos.writeObject(o);

oos.flush();

oos.close();

}

//从文件中读取对象

public static void readObject() throws Exception{

FileInputStream fis=new FileInputStream("c:\\1.txt");

ObjectInputStream ois=new ObjectInputStream(fis);

Object o=ois.readObject();

Book b=(Book) o;

System.out.println(b.getId());

System.out.println(b.getName());

ois.close();

fis.close();

}

     public static void main(String[] args) throws Exception {

Book b=new Book();

b.setId(1);

b.setAuthor("bruce");

b.setName("java 编程思想");

b.setPrice(101.00);

writeObject(b);

readObject();

}

}

代码解释:Book是已创建好的model,为里面赋好值,然后将Book这个对象写出去,writeObject是将对象写出去的方法,给我一个对象我就写出去。

ObjectOutputStream 必须提供一个outputstream参数,就是往哪个位置去写,然后调用writeobject方法将对象写出去,最后关闭连接。

readObject读方法,当我从文件中读取对象的时候,也需要为ObjectInputStream提供一个inputstream这种是典型的包装流。然后调用readobject方法读取对象,读取完之后我们将对象转换为Book类型,直接可以取出里面的值。

如果此时运行该程序会报一个错误java.io.NotSerializableException没有序列化的问题,这时候需要注意,如果一个对象要以I/O的方式去写,就必须实现一个接口Serializable,实现这个借口之后就代表着这个对象可被序列化,什么是序列化--》就是对象可以以I/O的方式去写。另外这个Serializable是一个标记性接口,里面什么方法都没有,什么是标记性接口?--》就是一个类如果实现了这个接口JVM就会认为这个类能做这件事,Book这个类实现了Serializable这个接口,JVM就会认为,Book这个类可以被序列化,之前还有一个接口Colenable,当我要克隆一个对象的时候只要实现这个接口然后super.clone();什么都不做就代表着这个对象可以被克隆。

思考:可不可以往一个文件中写入多个对象,如果可以,那么是怎样读取的。如果不可以是为什么。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值