`
justin8335
  • 浏览: 28833 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Java 中的Object串行化(Serializable)

阅读更多

假如你想保存一个对象(object),则这个对象所属类必须实现Serializable接口。

当串行化一个对象时,Java会保存对象的完整的“对象图”,即对该对象引用的其他对象,也进行串行化。当然,那些“其他对象”也要实现Serializable接口,否者抛NotSerializableException异常。

java 代码
  1. import java.io.*;   
  2.   
  3. public class A{   
  4.  public static void main(String [] args){   
  5.     Dog d = new Dog();   
  6.     Dog d2 = new Dog();   
  7.      try{   
  8.          FileOutputStream fos = new FileOutputStream("E:\\doc\\dogs.dat");   
  9.          ObjectOutputStream oos =new ObjectOutputStream(fos);   
  10.          oos.writeObject(d) ;   
  11.          oos.close();   
  12.      }catch(Exception e){   
  13.          e.printStackTrace();   
  14.      }   
  15.         
  16.      try{   
  17.          FileInputStream fis =new FileInputStream("E:\\doc\\dogs.dat");   
  18.          ObjectInputStream ois = new ObjectInputStream(fis);   
  19.          d2 = (Dog)ois.readObject();   
  20.          ois.close();   
  21.      }catch(Exception e){   
  22.          e.printStackTrace();   
  23.      }   
  24.         
  25.      System.out.println("name:"+d2.name+" age:"+d2.age+" shout:"+d2.shout());   
  26.         
  27.  }   
  28. }   
  29.   
  30. class Dog extends Animal implements Serializable{   
  31.  String name ="Peter";   
  32.  int age = 5;   
  33.  String  shout(){   
  34.     return  "Ho~Ho~";   
  35.  }   
  36.   
  37. }   
  38. //Animal必须是实现Serializable   
  39. class Animal implements Serializable{   
  40.  String name = "Unknown";
  41.  Animal(){
  42.    System.out.println("Animal构造函数运行");
  43.   }  
  44. }  

实现了Serialiable接口的超类,在串行化时不会运行构造函数。没有实现了Serialiable接口的超类,否则会运行其构造函数。(每当实例化一个子类对象时,父类的构造函数将先于子类的构造函数被调用。)

添加标识transient 的变量 将不会被串行化,当该变量所属对象被反串行化时,该变量变为其数据类型的默认值。(String默认值为null,int为0.)

串行化不适合静态变量,它只针对实例对象。

分享到:
评论

相关推荐

    Java关键字Transient与串行化

    Java提供了强大的串行化机制,允许程序员将任何实现了`Serializable`接口的对象转化为字节流,并将其写入文件或其他输出流中。反之,也可以从字节流中读取并恢复成对象。这个过程称为反串行化(Deserialization)。 ...

    【IT十八掌徐培成】Java基础第16天-03.串行化-深度复制.zip

    Java串行化是Java编程语言中的一个重要概念,用于将对象的状态转换为字节流,以便存储在磁盘上或在网络中传输。这个过程被称为对象的序列化,而将字节流恢复为对象的过程称为反序列化。在Java中,实现串行化的主要...

    什么是java序列化,如何实现java序列化?学习.pdf

    1. 将需要被序列化的类实现 Serializable 接口,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream 对象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj) 方法就可以将参数...

    什么是java序列化,如何实现java序列化?.pdf

    Java 序列化机制 Java 序列化是将一个对象的状态写入一个 Byte 流里,并且可以从其它...这是因为 Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。

    什么是java序列化,如何实现java序列化?借鉴.pdf

    这是因为 Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。 示例代码: ```java import java.io.*; public class Cat implements ...

    javaGUI程序设计PPT课件.pptx

    在Java中,对象串行化允许将对象的状态保存到文件或在网络上传输。通过实现Serializable接口,一个对象就可以被序列化。例如: ```java class MyObject implements Serializable { // 类的属性和方法 } ``` 然后...

    中软公司JAVA培训资料.doc

    实现串行化需实现Serializable接口,并注意私有字段、transient关键字和static字段的影响。 线程是并发执行的程序执行单元。Java中,线程有新建、可运行、运行和终止四种基本状态。线程同步是解决多线程共享资源...

    KryoJava序列化和克隆框架具有快速高效自动的特点

    6. **串行化与反串行化的API**:Kryo提供了简洁易用的API,使得开发者可以轻松地将对象序列化到字节数组、输入/输出流或者文件中,并且反序列化回来。 7. **兼容性**:Kryo虽然不是Java标准的序列化机制,但它能很...

    mysql-connector-java-5.1.39.jar资源下载

    6. 全面的事务支持:包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)四种隔离级别。 7. 集成到应用服务器:可以无缝集成到诸如 Tomcat、JBoss...

    中兴通java程序员面试题(高)

    23. **事务隔离级别**:包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。不同级别影响并发性能和数据一致性,如MySQL的默认隔离级别是可重复...

    JAVA培训资料面试宝典

    实现串行化需要实现`Serializable`接口,注意保护敏感信息不被串行化。 6. **线程的基本概念**:线程是程序执行的最小单位,允许多任务并发执行。线程有新建、就绪、运行、阻塞和死亡等基本状态,状态之间的转换...

    Java宝典大全

    Java提供了`Serializable`接口用于支持对象的序列化。 ### 实战案例分析 - **解决Java程序响应慢的问题**: 当遇到Java程序响应变慢的情况时,可以通过分析CPU使用率、内存消耗情况等指标来定位问题。使用`jstack`...

    java基础问题集合

    实现串行化,类需要实现`Serializable`接口,该接口没有方法或字段,仅作为一个标记。需要注意的是,串行化可能会导致安全性问题,且某些类型的对象(如包含循环引用的对象)无法串行化。 #### 线程的基本概念、...

    整理后java开发全套达内学习笔记(含练习)

    序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit] stack n.堆栈 [stæk] (对应 heap 堆) statement 程序语句; 语句 ['steitmәnt]' n. 陈述,...

    Java SSH 框架选择题题库 SSH考试题库附上答案 基础复习,考试必备神器,好好复习

    事务的隔离级别包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE),不同的隔离级别可以防止脏读、不可重复读和幻读等问题。 2. 默认拦截器可以...

    java数据结构

    - **实现方式**:通过实现`Serializable`接口来使类支持串行化。 **3. 迭代器** - **定义**:迭代器是一种允许以一致的方式访问集合元素的对象。 - **特点**:当检测到集合结构被修改时,迭代器会抛出`...

    1JavaSE考试题参考答案剖析.pdf

    12. **Serializable接口**:为了实现对象的串行化,类需要实现`Serializable`接口。 13. **数据库JDBC驱动**:Oracle的JDBC驱动程序类名为`oracle.jdbc.driver.OracleDriver`。 14. **图形用户界面(GUI)组件**:...

    IT互联网名企经典面试题汇总:Java篇1

    MySQL默认使用InnoDB存储引擎,支持四种隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ,MySQL默认级别)和串行化(SERIALIZABLE)。 11. **JVM内存模型**:包括...

Global site tag (gtag.js) - Google Analytics