`
nanapoleon
  • 浏览: 46876 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

折腾环境以及序列化开篇

阅读更多
    这周是个开始,给家里的笔记本装了环境(现在都用java7了啊,看来是有一阵子没装过环境了。我的印象还都是java6呢),虚拟机的ubuntu也装ok,下周准备checkout下android源码,不过现在都4.1了,又感觉落后太多了,因为3.0以后的就没有好好研究过了,it这行真是活到老学到老,算是上了贼船了。希望能把学习养成一种习惯,怎么就这么难~~但是,如果不这样,很快就会被淘汰了啊魂淡!
   虽然环境用不了多长时间搭,但是,还是用掉了我本就不多的业余生活。不过,每周都要有长进,是我长期以来希望能一直坚持下去的习惯。所以,讲讲以前编程时比较陌生的序列化吧。
    当你需要存储相同类型的数据时,使用固定长度的记录格式是一个不错的选择。但是,在面向对象程序中创建的对象很少全部都具有相同的类型。例如,你可能有一个称为staff的数组,它名义上是一个Employee记录数组,但是,实际上却包含一些Manager这样的子类实例。
    我们当然可以自己设计出一种数据格式来存储这种多态集合,但是幸运的是,我们并不需要这么做。Java语言支持一种对象序列化(object serialization)的非常通用的机制,它可以将任何对象写出到流中,并在之后将其读回。
    为了保存对象数据,首先需要打开一个ObjectOutputStream对象:
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"));

    现在,为了保存对象,我们可以像下面这样直接使用ObjectOutputStream的writeObject方法:
    Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
    Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
    out.writeObject(harry);
    out.writeObject(boss);

    为了将这些对象读回,首选需要获得一个ObjectInputStream对象:
    ObjectInputStream in = new ObjectInputStream(new FileInputStream("employee.dat"));

    然后,用readObject方法以这些对象被写出是的顺序获得它们:
    Employee e1 = (Employee) in.readObject();
    Employee e2 = (Employee) in.readObject();

    但是,你必须对希望在对象流中存储或恢复的所有类都进行一下修改,这些类必须实现Serializable接口:
    Serializable接口没有任何方法,因此你不需要对这些做任何改动。
    对象化是非常有用的保存和传递java对象的一个方法,后面有时间,我还会继续深入介绍这个内容。当然不是调用上面的read write接口那么简单。例如,一些对象不可序列化,那么我们就要自己去做一些序列化的事。
    为什么要看序列化呢,因为,其实android也有序列化:Parcelable。这个是应该是android为了更高效的序列化效果而升级的。再贴一段话给各位:
Serializable is a standard Java interface. You simply mark a class Serializable by implenting the interface, and Java will automatically serialize it in certain situations.
Parcelable is an Android specific interface where you implement the serialization yourself. It was created to be far more efficient that Serializable, and to get around some problems with the default Java serialization scheme.
I believe that Binder and AIDL work with Parcelable objects.
However, you can use Serializable objects in Intents.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics