`
m635674608
  • 浏览: 5031820 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 序列化之当序列化遭遇继承

    博客分类:
  • java
 
阅读更多

当一个父类实现Serializable接口后,他的子类都将自动的实现序列化。

public class SerializableEr implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
  
   // public SerializableEr(){};
}

 

public class Serial extends SerializableEr{
    int id;
	String name;
	public Serial(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public String toString() {
		return "DATA: " + id + " " +name;

	}
	public static void main(String[] args) {
        Serial serial=new Serial(1,"4234");
        System.out.println("object serial:"+serial); 
        try{
            FileOutputStream fos=new FileOutputStream("serialTest.txt"); 
            ObjectOutputStream oos=new ObjectOutputStream(fos); 
            oos.writeObject(serial); 
            oos.flush(); 
            oos.close(); 
        }catch(Exception e){
            System.out.println("Exception:"+e); 
        }
    }
}

 

运行结果如下:

object serial:DATA: 1 4234

要为一个没有实现Serializable接口的父类,编写一个能够序列化的子类是一件很麻烦的事情。java docs中提到:

“To allow subtypes of non-serializable classes to be serialized, the subtype may assume responsibility for saving and restoring the state of the supertype's public, protected, and (if accessible) package fields. The subtype may assume this responsibility only if the class it extends has an accessible no-arg constructor to initialize the class's state. It is an error to declare a class Serializable if this is not the case. The error will be detected at runtime. ”

  也就是说,要为一个没有实现Serializable接口的父类,编写一个能够序列化的子类要做两件事情:

  其一、父类要有一个无参的constructor;

  其二、子类要负责序列化(反序列化)父类的域。

  http://www.yesky.com/376/1908876.shtml

public class SerializableEr{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
  
   // public SerializableEr(){};
}
public class Serial extends SerializableEr implements Serializable{
    int id;
	String name;
	public Serial(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public String toString() {
		return "DATA: " + id + " " +name;

	}
	public static void main(String[] args) {
        Serial serial=new Serial(1,"4234");
        System.out.println("object serial:"+serial); 
        try{
            FileOutputStream fos=new FileOutputStream("serialTest.txt"); 
            ObjectOutputStream oos=new ObjectOutputStream(fos); 
            oos.writeObject(serial); 
            oos.flush(); 
            oos.close(); 
        }catch(Exception e){
            System.out.println("Exception:"+e); 
        }
    }
}

 总结:

  为一个实现Serializable接口的父类,编写一个能够序列化的子类 子类将自动的实现序列化

  为一个没有实现Serializable接口的父类,编写一个能够序列化的子类 ,只要父类实现了序列化的接口,或者,子类实现了序列化的接口。就可以序列化 

分享到:
评论

相关推荐

    java序列化全解

    Java序列化是Java平台中的一种核心机制,它允许对象的状态被转换成字节流,以便存储到磁盘、数据库,或者在网络中进行传输。这对于实现持久化、远程方法调用(RMI)以及Enterprise JavaBeans(EJB)等高级功能至关...

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

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

    Java序列化的机制和原理

    Java序列化是Java平台提供的一种将对象转换为字节流,以便存储、在网络上传输或者在后续时间重新创建相同对象的机制。这是Java编程中一个非常重要的概念,尤其是在分布式环境和持久化存储中。让我们深入探讨一下Java...

    Java_序列化的高级认识

    ### Java序列化的高级认识 Java序列化作为Java技术体系中的一个重要组成部分,其核心功能在于能够将Java对象转换成字节流,从而实现对象的持久化存储或是通过网络传输。然而,序列化的应用远不止于此,它还涉及到一...

    如何正确的使用Java序列化技术

    ### 如何正确使用Java序列化技术 #### 技术研究系列 **摘要:** 本文将深入探讨Java序列化技术的各个方面,从基础知识入手,逐步展开对序列化技术机制与原理的介绍。此外,还将深入讨论如何精准控制序列化机制,...

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

    序列化使用的是`ObjectOutputStream`和`ObjectInputStream`,它们继承自`DataOutputStream`和`DataInputStream`,但增加了对Java对象的支持。数据流则主要用于基本类型和字符串的读写。 8. **序列化与克隆** 虽然...

    JAVA对象的序列化与反序列化详细PPT课件.pptx

    另外,还有`java.io.Externalizable`接口,它继承自`Serializable`,但提供了更细粒度的控制权,允许类自定义序列化和反序列化的行为。如果一个类实现了`Externalizable`,则需要手动实现`writeExternal...

    Java SE编程入门教程 java序列化(共14页).pptx

    Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...

    java序列化和反序列化1

    Java的序列化和反序列化是Java开发中重要的概念,主要涉及对象状态的持久化以及在网络传输中的数据转换。在Java中,序列化是将一个对象转换为字节序列的过程,而反序列化则是将字节序列恢复为原始对象的过程。 1. *...

    Java序列化与反序列化

    Java序列化是Java平台中的一种持久化机制,它允许对象的状态被转换成字节流,以便存储或在网络中传输。这个过程称为序列化,而将字节流还原为对象的过程称为反序列化。序列化在许多场景下都非常有用,比如在分布式...

    hashtable序列化与反序列化

    `HashTable`继承自`Dictionary`类,并实现了`Serializable`接口,因此它支持序列化操作。 要序列化一个`HashTable`对象,我们需要执行以下步骤: 1. 确保`HashTable`类或包含它的类实现了`Serializable`接口。例如...

    Java序列化(Serializable)与反序列化_.docx

    ### Java序列化(Serializable)与反序列化详解 #### 序列化概念与应用场景 序列化是指将程序中的对象转换为一系列字节序列的过程,主要用于保存对象的状态以便将来使用或者在网络之间传输对象。Java提供了内置的...

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

    Java 序列化机制 Java 序列化是将一个对象的状态写入一个 Byte 流里,并且可以从其它地方把该 Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到...

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

    Java 序列化机制 Java 序列化是指将一个对象的状态写入一个 Byte 流里,并且可以从其它地方把该 Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到...

    Gson 枚举类型的统一序列化/反序列化处理

    要实现自定义的枚举序列化和反序列化,我们需要创建一个继承自`Gson.TypeAdapter`的类。这个类需要重写`read()`和`write()`方法。`read()`方法负责将JSON解析为枚举值,而`write()`方法则将枚举值转化为JSON。下面是...

    java序列化

    Java序列化是Java平台提供的一种持久化对象状态的机制,它可以将对象转换成字节流,以便存储到磁盘上,或者在网络中进行传输。这一过程被称为对象的序列化。相反,将字节流还原为原来的对象的过程叫做反序列化。 ...

    C#对象序列化与反序列化

    - **类型继承与反序列化**:当存在继承关系时,可以使用`[XmlInclude]`特性来包含子类型。 - **排除不需要序列化的成员**:使用`[XmlIgnore]`特性来排除某个成员。 - **强制指定成员的序列化顺序**:使用`...

    Java对象序列化

    1. **魔数**:标识文件为Java序列化文件,固定为`ACED`。 2. **序列化协议版本号**:目前常用的版本号为`0005`。 3. **对象类型标志**:一个字节用于表示对象类型。例如`0x73`表示普通Java对象。 4. **类或引用标志*...

    java序列化和反序列化,面试必备

    Java序列化和反序列化是Java开发中常见且重要的概念,尤其在面试中常常被问及。序列化是指将一个Java对象转化为字节序列的过程,这样可以将对象的状态持久化到磁盘上或者在网络中进行传输。反序列化则是相反的过程,...

Global site tag (gtag.js) - Google Analytics