`
wenjianping007
  • 浏览: 13998 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Java实现序列化作用及实例

    博客分类:
  • java
阅读更多

(一)序列化作用:

把内存中的对象转化为另一种形式,以供传输或存储。

(二)序列化前提:

(1)要序列化对象必须是可序列化的,即必须实现 Serializable 接口。

(2)要序列化对象的属性也都是可序列化的。

(3)要序列化对象引用的对象也必须是可序列化的,如:要序列化一个 HashMap 实例,需要把放入到HashMap中的对象也都序列化。

(4)要序列化一个内部类,该内部类必须可序列化,并且外部类也必须可序列化。

(5)基本数据类型都是可以序列化的。

(三)序列化举例:

下面是一个User类,演示了把一个User实例写入文件,然后在再文件中读出。

package serialize;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 2143L;

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * @todo 将一个可以序列化的对象写入文件
     * @param obj
     *            要保存的对象
     * @param fileName
     *            目标文件
     */
    public void writeToFile(Object obj, String fileName) {
        ObjectOutputStream oos = null;
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(fileName);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
            oos.flush();
            System.out.println("write ok!");
        } catch (Exception e) {
            System.out.println("write false! The error : " + e.getStackTrace());

        } finally {
            //关闭文件流
            try {
                if (oos != null) {
                    oos.close();
                }
                if(fos != null){
                    fos.close();
                }
            } catch (IOException e) {
                System.out.println("close flus false! The error : "  + e.getStackTrace());
            }
        }
    }

    /**
     * @param fileName
     *            保存对象的文件
     * @return 从文件中得到的对象
     */
    public Object getObjFromFile(String fileName) {
        Object obj = null;
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream(fileName);
            ois = new ObjectInputStream(fis);
            obj = ois.readObject();
            ois.close();
            System.out.println("read ok!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭文件流
            try {
                if (ois != null) {
                    ois.close();
                }
                if(fis != null){
                    fis.close();
                }
            } catch (IOException e) {
                System.out.println("close flus false! The error : "  + e.getStackTrace());
            }
        }
        return obj;
    }

    public static void main(String[] args) {

        String fileName = "c://user.txt"; // 保存对象的文件
        User user = new User("@pony", 28); // 创建一个User对象
        user.writeToFile(user, fileName); // 将对象写入文件
        User u = (User) (user.getObjFromFile(fileName)); // 从文件中取得对象
        // 输出对象名        
        if (u != null)
            System.out.println("ok, get the user object from the file. /nThe user's name is : " + u.name); 
    }

}
 

分享到:
评论

相关推荐

    Java 对象序列化详解以及实例实现和源码下载

    Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...

    Java实现序列化例子

    Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...

    java序列化(Serializable)的作用和反序列化.doc

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...

    java serializable 序列化与反序列化

    **一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节数组,以便写入磁盘或通过网络发送。 2. **为什么需要...

    java自动序列化

    三、如何实现Java序列化 要使一个类及其所有子类可序列化,只需在类定义中添加`implements Serializable`即可。例如: ```java public class MyClass implements Serializable { // class members } ``` 对于类中...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。

    java序列化(Serializable)的作用和反序列化

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...

    java序列化全解

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

    通过实例深入了解java序列化

    通过实例深入了解 Java 序列化 Java 序列化是 Java 系列技术中一个较为重要的技术点,用于将 Java 对象序列化为二进制文件。开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和...

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

    通过实现`java.io.Serializable`接口,一个类的实例就能被序列化。 2. **默认序列化过程** 默认情况下,序列化会保存对象的所有实例变量,但不包括静态变量。这是因为静态变量属于类,而非特定的对象实例。序列化...

    java 对象序列化

    在Java中,如果一个类想要实现序列化,它必须实现`Serializable`接口。这个接口是一个标记接口,不包含任何方法,它的存在只是为了表明该类的对象是可以被序列化的。例如: ```java public class MyClass ...

    java 序列化时排除指定属性

    Java序列化是Java平台提供的一种持久化机制,它允许我们将一个Java对象转换为字节流,以便存储到磁盘上,或者通过网络进行传输。这使得我们可以保存和恢复对象的状态。实现序列化的类需要实现`Serializable`接口,...

    java对象序列化.ppt

    `Serializable`接口是一个空接口,当一个类实现它时,表明该类的所有实例都可以被序列化。而`Externalizable`接口提供了更多的控制权,允许开发者自定义序列化和反序列化的过程。 实现`Serializable`接口的示例如下...

    java原生序列化和Kryo序列化性能实例对比分析

    对于java原生序列化,我们使用了ObjectOutputStream和ObjectInputStream来实现序列化和反序列化,而对于Kryo序列化,我们使用了Kryo序列化器来实现序列化和反序列化。 6. 序列化的应用:序列化有很多实际应用,例如...

    Java对象序列化的秘密

    在Java中,实现对象序列化主要依靠实现`java.io.Serializable`接口。本文将深入探讨Java对象序列化的原理、用途和注意事项。 **一、序列化原理** 1. **实现Serializable接口**: 对象要能够被序列化,它所在的类...

    java序列化和反序列化

    Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象能够在不同的平台之间进行传输,并且能够保持其原始状态。 *...

    Java反序列化安全漏洞防控

    Java反序列化安全漏洞是一种严重的安全威胁,它主要发生在Java程序处理序列化数据时。序列化是Java中的一种机制,可以将对象状态转换为字节流,以便存储或传输。反序列化则是将字节流恢复为Java对象的过程。 在Java...

    java对象实现序列化

    一旦类实现了`Serializable`接口,Java的序列化机制就可以将对象实例转换为字节数组。这通常通过`ObjectOutputStream`的`writeObject()`方法完成: ```java User user = new User("NiceGege", 30); try ...

    JAVA对象序列化保存为XML文件的工具类

    当一个类实现此接口时,它的实例可以被序列化。在某些情况下,我们可能希望将这些序列化对象以XML格式存储,以便于阅读和编辑。`java.beans`包中的`XMLEncoder`和`XMLDecoder`就是为此目的设计的。 `XMLEncoder`是...

    Java反序列化实战.pdf

    - **持久化存储**:对象的状态可以被序列化并保存到磁盘上,之后可以从磁盘上读取并反序列化回内存中的对象实例。 - **重要性**:在现代软件开发尤其是分布式系统和微服务架构中,反序列化技术对于实现高效的数据...

Global site tag (gtag.js) - Google Analytics