`
nanapoleon
  • 浏览: 48027 次
  • 性别: 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.
分享到:
评论

相关推荐

    C#和Java的序列化反序列化

    在编程领域,序列化和反序列化是两个关键的概念,特别是在跨平台通信、持久化存储以及数据传输中扮演着重要角色。本篇文章将深入探讨C#和Java中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指...

    java 对象的序列化与反序列化

    这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来解释一下什么是序列化。在Java中,序列化(Serialization)是指将一个对象转换为字节流的过程,这个字节流可以保存到...

    ASPNET中JSON的序列化和反序列化的方法

    下面将详细介绍***中JSON序列化和反序列化的几种方法以及如何处理日期时间类型的序列化和反序列化。 首先,了解JSON的基本格式是非常重要的。JSON的数据结构由对象(Object)、数组(Array)、字符串(String)、数字...

    序列化和反序列化dll文件和proto

    它们涉及将对象的状态转换为可持久化的格式(序列化),以及将这种格式还原回原来的对象(反序列化)。本文将深入探讨这两种技术在处理DLL文件和Protocol Buffers(proto)时的应用。 首先,DLL(Dynamic Link ...

    序列化和反序列化的封装类

    本篇文章将深入探讨序列化和反序列化的概念,以及如何使用封装类来简化这一过程。 首先,我们需要理解什么是序列化。序列化是将一个对象的状态转换为可以存储或传输的形式,通常是XML、JSON或二进制格式。这样做的...

    XML序列化与反序列化 实战

    XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...

    hessian学习基础篇——序列化和反序列化

    在IT领域,序列化和反序列化是两个关键的概念,特别是在网络通信、数据持久化以及对象存储中。本文将深入探讨Hessian框架的基础知识,它是一个高效的二进制序列化协议,广泛应用于Java和.NET之间跨语言通信。通过...

    java序列化和反序列化的方法

    java 序列化和反序列化的方法 Java 序列化和反序列化是 Java 语言中的一种机制,用于将对象转换为字节流,以便在网络上传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在...

    delphi序列化与反序列化

    在IT行业中,序列化和反序列化是两个关键的概念,特别是在对象持久化、数据传输以及存储方面。在Delphi编程环境中,这两个概念同样至关重要。本文将深入探讨Delphi中的序列化与反序列化,以及如何处理组件和结构体的...

    学生管理系统(序列化和反序列化)

    这可能涉及到更新学生类的定义,以及序列化和反序列化逻辑的相应调整。 综上所述,学生管理系统通过序列化和反序列化实现了对学生信息的有效管理,确保了数据的持久性和程序的可恢复性。这一技术的应用不仅简化了...

    序列化反序列化例题net

    在.NET框架中,序列化和反序列化是两个重要的概念,它们主要用于数据持久化、网络传输和跨进程通信。理解并熟练运用这些技术对于任何.NET开发者来说都是至关重要的。 序列化是将对象的状态(包括其属性和字段)转换...

    C#对象序列化反序列化保存与读取和对象直接保存与读取

    本主题将深入探讨如何在Windows Forms(WF)环境中,利用C#语言进行对象的直接保存与读取,以及通过对象序列化和反序列化的方式实现对象的保存与恢复。 首先,我们来理解什么是对象的直接保存与读取。在C#中,可以...

    C#序列化与反序列化(包括复杂xml对象)

    本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反...

    Qt 序列化函数和反序列化函数

    在实际开发中,`releasestudent.bat`可能是用来执行编译或运行程序的批处理脚本,确保在发布环境中正确执行序列化和反序列化操作。 总结一下,Qt的序列化和反序列化主要依赖于QDataStream,它提供了便捷的方法来...

    Jedis序列化和反序列化使用jar

    本文将深入探讨在使用Jedis时如何处理对象的序列化和反序列化,以及相关依赖库的作用。 首先,让我们了解什么是序列化和反序列化。序列化是将对象的状态转换为可存储或传输的形式的过程,而反序列化则是将这种形式...

    hashtable序列化与反序列化

    在IT领域,序列化和反序列化是两个关键的概念,特别是在处理对象持久化、网络传输或数据存储时。本文将详细探讨标题所提及的“hashtable序列化与反序列化”,并提供一个基本的示例。 首先,让我们理解什么是序列化...

    java反序列化工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...

    C# 各种序列化和反序列化

    在编程世界中,序列化和反序列化是两个至关重要的概念,尤其是在C#这样的面向对象的语言中。它们允许我们将对象的状态转换为数据流,以便存储或传输,然后将这些数据流还原为原来的对象形式。本篇文章将深入探讨C#中...

    基于boost的序列化与反序列化

    在Boost.Serialization中,你可以对自定义的类以及标准模板库(STL)中的容器进行序列化。例如,你可以序列化一个包含`std::vector`,`std::map`,或者其他STL容器的类实例。 Boost.Serialization提供了两种主要的...

    C#对象三种形式的序列化和反序列化

    本主题将详细探讨C#中的三种序列化方式:二进制序列化、SOAP序列化和XML序列化,以及如何在包含图片的数据对象中应用这些技术。 1. **二进制序列化(Binary Serialization)** 二进制序列化是最有效率的方式,因为...

Global site tag (gtag.js) - Google Analytics