JAVA笔记——序列化

所谓的对象序列化(在很多地方也被成为串行化),是指将对象转换成二进制数据流的一种实现手段。通过将对象序列化,可以方便地实现对象的传输及保存。

  在Java中提供有ObjectInputStream与ObjectOutputStream这两个类用于序列化对象的操作。这两个类是用于存储和独缺对象的输入输出流类,只要把对象中的所有成员变量都存储起来,就等于保存了这个对象,之后从保存的对象之中再将对象读取进来就可以继续使用此对象。ObjectInputStream类与ObjectOutputStream类,用于帮助开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用作一种标志,已被编译器作特殊处理。

  下面是对象的序列化范例:

 import java.io.* ;
 public class Person implements Serializable
 {
  private String name ;
  private int age ;
  public Person(String name,int age)
  {
   this.name = name ;
   this.age = age ;
  }
  public String toString()
  {
   return " 姓名:"+this.name+",年龄:"+this.age ;
  }
 };

  这个类实现了Serializable接口,所以此类的对象可序列化。下面的范例使用ObjectOutputStream与ObjectInputStream将Person类的对象保存在文件之中:

 import java.io.*;
 public class SerializableDemo
 {
  public static void main( String args[] ) throws Exception
  {
   File f = new File("SerializedPerson") ;
   serialize(f);
   deserialize(f);
  }
 
  // 以下方法为序列化对象方法
  public static void serialize(File f) throws Exception
  {
   OutputStream outputFile = new FileOutputStream(f);
   ObjectOutputStream cout = new ObjectOutputStream(outputFile);
   cout.writeObject(new Person("张三",25));
   cout.close();
  }
  // 以下方法为反序列化对象方法
  public static void deserialize(File f) throws Exception
  {
   InputStream inputFile = new FileInputStream(f);
   ObjectInputStream cin = new ObjectInputStream(inputFile);
   Person p = (Person) cin.readObject();
   System.out.println(p);
  }
 }

  在程序中声明了一个deserialize()方法,此方法用于从文件中读取已经保存的对象。

  另外,如果不希望类中的某个属性被序列化,可以在声明属性之前加上transient关键字。用这个关键字修饰的属性没有被保存下来,输出时,将输出默认值。   

最新内容请见作者的GitHub页:http://qaseven.github.io/

   

时间: 2024-10-23 04:08:56

JAVA笔记——序列化的相关文章

java对象序列化学习笔记

java对象|笔记 目前网络上关于对象序列化的文章不少,但是我发现详细叙述用法和原理的文章太少.本人把自己经过经验总结和实际运用中的体会写成的学习笔记贡献给大家.希望能为整个java社区的繁荣做一点事情.    序列化的过程就是对象写入字节流和从字节流中读取对象.将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序列化功能非常简单.强大,在RMI.Socket.JMS.EJB都有应用.对象序列化问题在网

Ajax 的 Java 对象序列化

ajax|对象 如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机.在面向 Java 开发人员的 Ajax 系列的文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息.本文将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据. 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他们

Ajax 的 Java 对象序列化(1)

ajax|对象 如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机. 在面向 Java 开发人员的 Ajax 系列的文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息.本文将侧重于许多 Java Web 开发人员最关心的问题:为客户机生成数据. 多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他

关于Java对象序列化您不知道的5件事

数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会 到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户 设置存储在一个 Hashtable 中,然后将这个 Hashtable 序列化到磁盘,以便持 久化.当用户更改设置时,便重新将 Hashtable 写到磁盘. 这是一个优雅的.开放式的设置系统,但是,当团队决定从 Hashtable 迁移 到 Java Collections 库中的

Java对象序列化使用基础

所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象.这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新"装配".像RMI.Socket.JMS.EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳. Java对象序列化机制一般来讲有两种用途: Java的JavaBeans: Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被

Java利用序列化实现对象深度clone的方法_java

本文实例讲述了Java利用序列化实现对象深度clone的方法.分享给大家供大家参考.具体实现方法如下: ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(obj); ByteArrayInputStream byteIn = new ByteArrayInputStream(by

Java对象序列化/反序列化的注意事项(转)

Java对象序列化     对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下.     对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在JVM中的活动对象与字节数组(流)之间进行转换,使用得Java对象可以被存储,可以被网络

java对象序列化的概念和实现

一 序列化的概念和实现方法 序列化的概念就是把一个Object直接转换成为Byte流写到硬盘或者通过网络进行传播.Java序列化技术可以将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte流里的数据读出来,重新构造一个相同的对象.这种机制允许将对象通过网络进行传播,并可以随时把对象持久化到数据库.文件等系统里.Java的序列化机制是RMI.EJB等技术的技术基础.   序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将

Java的序列化和反序列化

1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态, 也就是实例变量,不是方法, 并且可以把保存的对象状态再读出来. 虽然你可以用你自己的各种各样的方法来保存object states, 但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化. 2.什么情况下需要序列化 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候:  当你想用套接字在网络上传送对象的时候:  当你想通过RMI传输对象的时候:  3.一个例子 序列化需要实现Serializable