这周是个开始,给家里的笔记本装了环境(现在都用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中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指...
1. 复杂类型的处理:除了基本类型外,还可以序列化和反序列化自定义类、结构体以及容器(如vector、map等)。对于自定义类型,通常需要重载`operator和`operator>>`,或者使用nlohmann/json库中的`to_json`和`from_...
下面将详细介绍***中JSON序列化和反序列化的几种方法以及如何处理日期时间类型的序列化和反序列化。 首先,了解JSON的基本格式是非常重要的。JSON的数据结构由对象(Object)、数组(Array)、字符串(String)、数字...
在Boost.Serialization中,你可以对自定义的类以及标准模板库(STL)中的容器进行序列化。例如,你可以序列化一个包含`std::vector`,`std::map`,或者其他STL容器的类实例。 Boost.Serialization提供了两种主要的...
XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...
在IT领域,序列化和反序列化是两个关键的概念,特别是在网络通信、数据持久化以及对象存储中。本文将深入探讨Hessian框架的基础知识,它是一个高效的二进制序列化协议,广泛应用于Java和.NET之间跨语言通信。通过...
java 序列化和反序列化的方法 Java 序列化和反序列化是 Java 语言中的一种机制,用于将对象转换为字节流,以便在网络上传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在...
序列化的主要目的是为了能够持久化保存对象的状态以及在不同系统间传输这些对象。 在Java中,通过实现`Serializable`接口,可以方便地进行对象的序列化操作。序列化的核心在于能够将对象的状态转换为可以存储或传输...
在IT行业中,序列化和反序列化是两个关键的概念,特别是在对象持久化、数据传输以及存储方面。在Delphi编程环境中,这两个概念同样至关重要。本文将深入探讨Delphi中的序列化与反序列化,以及如何处理组件和结构体的...
这可能涉及到更新学生类的定义,以及序列化和反序列化逻辑的相应调整。 综上所述,学生管理系统通过序列化和反序列化实现了对学生信息的有效管理,确保了数据的持久性和程序的可恢复性。这一技术的应用不仅简化了...
开发者应该熟悉protobuf的语法规则,掌握如何定义消息类型,以及如何在不同编程语言中使用生成的代码进行序列化和反序列化操作。对于大型团队,规范化的protobuf定义管理和版本控制也是必不可少的,以确保不同模块...
在.NET框架中,序列化和反序列化是两个重要的概念,它们主要用于数据持久化、网络传输和跨进程通信。理解并熟练运用这些技术对于任何.NET开发者来说都是至关重要的。 序列化是将对象的状态(包括其属性和字段)转换...
在计算机科学领域,序列化和反序列化是两个至关重要的概念,特别是在数据传输、存储以及对象持久化等场景。这两个过程对于理解数据流如何在内存、磁盘和网络之间转换至关重要。 序列化是指将对象的状态转化为可存储...
本主题将深入探讨如何在Windows Forms(WF)环境中,利用C#语言进行对象的直接保存与读取,以及通过对象序列化和反序列化的方式实现对象的保存与恢复。 首先,我们来理解什么是对象的直接保存与读取。在C#中,可以...
在实际开发中,`releasestudent.bat`可能是用来执行编译或运行程序的批处理脚本,确保在发布环境中正确执行序列化和反序列化操作。 总结一下,Qt的序列化和反序列化主要依赖于QDataStream,它提供了便捷的方法来...
本文将深入探讨在使用Jedis时如何处理对象的序列化和反序列化,以及相关依赖库的作用。 首先,让我们了解什么是序列化和反序列化。序列化是将对象的状态转换为可存储或传输的形式的过程,而反序列化则是将这种形式...
在IT领域,序列化和反序列化是两个关键的概念,特别是在处理对象持久化、网络传输或数据存储时。本文将详细探讨标题所提及的“hashtable序列化与反序列化”,并提供一个基本的示例。 首先,让我们理解什么是序列化...
Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...
`jackson-annotations-2.2.3.jar` 提供了诸如`@JsonProperty`、`@JsonIgnore`、`@JsonInclude`等注解,可以方便地控制哪些字段应该被序列化或反序列化,以及如何处理特定的数据类型。 要使用Jackson库进行JSON序列...
本篇将详细探讨C#中的高级序列化和反序列化机制,以及如何在实际项目中有效利用它们。 1. **什么是序列化与反序列化?** - **序列化**:是将对象的状态转化为可持久化的格式(如XML、JSON、二进制等),使得对象...