`
sjsky
  • 浏览: 918236 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java对象序列化ObjectOutputStream和ObjectInputStream示例

    博客分类:
  • Java
阅读更多

         blog迁移至 :http://www.micmiu.com

 

Java中ObjectInputStream 与 ObjectOutputStream这两个包装类可用于输入流中读取对象类数据和将对象类型的数据写入到底层输入流 。ObjectInputStream 与 ObjectOutputStream 类所读写的对象必须实现了 Serializable 接口。需要注意的是:对象中的 transient 和 static 类型的成员变量不会被读取和写入

 

具体代码示例:

 

O bjectFileConvert.java

 

package michael.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class ObjectFileConvert {

    /**
     * 文件转化为Object
     * @param fileName
     * @return byte[]
     */
    public static Object file2Object(String fileName) {

        FileInputStream fis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream(fileName);
            ois = new ObjectInputStream(fis);
            Object object = ois.readObject();
            return object;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e2) {
                    e2.printStackTrace();
                }
            }
        }
        return null;
    }

    /**
     * 把Object输出到文件
     * @param obj
     * @param outputFile
     */
    public static void object2File(Object obj, String outputFile) {
        ObjectOutputStream oos = null;
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(new File(outputFile));
            oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e2) {
                    e2.printStackTrace();
                }
            }
        }
    }

    /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        String fileName = "d:/test/object.obj";
        List<String> list = new ArrayList<String>();
        list.add("michael");
        list.add("大大");

        ObjectFileConvert.object2File(list, fileName);
        System.out.println("success write List<String> to file.");

        List<String> tmpList = (List<String>) ObjectFileConvert
                .file2Object(fileName);
        for (String tmp : tmpList) {
            System.out.println(tmp);
        }

        System.out.println("--------------------------------");

        fileName = "d:/test/uservo.obj";
        UserVo vo = new UserVo("michael", "大大", 18, new Date());

        ObjectFileConvert.object2File(vo, fileName);
        System.out.println("success write bean:UserVo to file.");

        UserVo tmpvo = (UserVo) ObjectFileConvert.file2Object(fileName);
        System.out.println("read bean:UserVo from file get info : " + tmpvo);

    }

}

 

UserVo.java

package michael.io;

import java.io.Serializable;
import java.util.Date;

/**
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class UserVo implements Serializable {

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -6846034858002233878L;

    private String userId;

    private String userName;

    private int age;

    private Date born;

    public UserVo() {
    }

    public UserVo(String userId, String userName, int age, Date born) {
        this.userId = userId;
        this.userName = userName;
        this.age = age;
        this.born = born;
    }

    /**
     * @return the userId
     */
    public String getUserId() {
        return userId;
    }

    /**
     * @return the userName
     */
    public String getUserName() {
        return userName;
    }

    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }

    /**
     * @return the born
     */
    public Date getBorn() {
        return born;
    }

    /**
     * @param pUserId the userId to set
     */
    public void setUserId(String pUserId) {
        userId = pUserId;
    }

    /**
     * @param pUserName the userName to set
     */
    public void setUserName(String pUserName) {
        userName = pUserName;
    }

    /**
     * @param pAge the age to set
     */
    public void setAge(int pAge) {
        age = pAge;
    }

    /**
     * @param pBorn the born to set
     */
    public void setBorn(Date pBorn) {
        born = pBorn;
    }

    @Override
    public String toString() {
        return "userId=[ " + userId + " ] userName=[ " + userName + " ] age=[ "
                + age + " ] born=[ " + born + "] .";
    }

}
 
运行结果如下:
success write List<String> to file.
michael
大大

--------------------------------
success write bean:UserVo to file.
read bean:UserVo from file get info : userId=[ michael ] userName=[ 大大 ] age=[ 18 ] born=[ Mon Aug 01 13:49:33 CST 2011] .

 

本文连接:http://sjsky.iteye.com/blog/1137231

 

 

转载请注明来自:Michael's blog @ http://sjsky.iteye.com

----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------

 

 

 

分享到:
评论

相关推荐

    java序列化与ObjectOutputStream和ObjectInputStream的实例详解

    下面是一个简单的示例代码,演示了如何使用ObjectOutputStream和ObjectInputStream来实现序列化和反序列化: 首先,定义一个实现了Serializable接口的实体类Param: ```java public class Param implements ...

    java对象序列化.ppt

    总结来说,Java对象序列化是将对象状态转换为字节流,便于存储和网络传输的关键技术。通过实现`Serializable`或`Externalizable`接口,我们可以控制对象如何被序列化和反序列化,同时`transient`关键字提供了保护...

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

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

    Java对象的序列化和反序列化实践

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们对于数据存储、网络传输以及持久化有着重要的作用。这篇文章将深入探讨这两个主题,并通过实践例子来阐述其工作原理。 **序列化(Serialization)*...

    Java对象序列化详细解析.doc

    总结来说,Java对象序列化是Java平台提供的一种强大的机制,用于保存和恢复对象的状态,广泛应用于持久化存储、网络传输和分布式计算等场景。理解和熟练使用序列化是每个Java开发者必备的技能之一。

    java 序列化代码示例

    Java序列化是Java平台中的一种标准机制,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在Java中,一个类如果要实现序列化,需要实现`Serializable`接口,这是一个标记接口,不包含任何方法。下面我们将...

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

    3. **远程方法调用(RMI)**:在Java RMI中,客户端和服务端之间的交互也依赖于序列化技术,以传输请求和响应对象。 #### 三、序列化的过程 当对一个对象实现序列化时,具体会发生以下过程: 1. **对象状态的保存**...

    Java序列化

    - 使用 `java.io.ObjectOutputStream` 类的 `writeObject()` 方法将对象写入到输出流,从而实现序列化。 - 使用 `java.io.ObjectInputStream` 类的 `readObject()` 方法从输入流读取对象,实现反序列化。 4. **...

    什么是Java的序列化和反序列化?如何实现对象的序列化和反序列化?(java面试题附答案).txt

    在Java中,实现对象的序列化和反序列化主要依赖于`Serializable`接口。这是一个标记接口,意味着它没有提供任何方法,仅仅是告诉JVM该对象支持序列化。具体实现方式如下: 1. **序列化**: - 实现`Serializable`...

    java中对象的序列化

    `ObjectOutputStream`和`ObjectInputStream`是Java提供的两个核心类,用于处理对象的序列化和反序列化。`ObjectOutputStream`的`writeObject()`方法是关键,它可以处理对象及其引用对象的序列化。每个`...

    java 常用序列化和反序列化框架使用demo

    要序列化一个对象,可以使用`ObjectOutputStream`,反序列化则使用`ObjectInputStream`。虽然简单易用,但效率较低,且序列化的元数据(如类名、字段名)会被包含在字节流中,存在安全风险(如反序列化攻击)。 2. ...

    java序列化和反序列化

    ### Java序列化与反序列化详解 #### 一、Java序列化概述 Java序列化(Serialization...综上所述,Java序列化提供了一种简单有效的方式来处理对象的持久化和传输需求,但开发者也需要考虑其可能带来的性能和安全问题。

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

    序列化和反序列化是Java中非常重要的概念,它们提供了强大的工具来处理对象的状态保存和恢复问题。通过上述介绍和示例代码,我们可以看到序列化的基本过程及其应用场景。掌握这些知识对于开发高效可靠的Java应用程序...

    java对象序列化与反序列化的默认格式和json格式使用示例

    在Java编程中,对象序列化是将一个对象的状态转换为可存储或可传输的数据格式的过程,而反序列化则是将这些数据恢复为原来的对象状态。这个过程在数据持久化、网络传输或者跨进程通信等场景中十分常见。Java提供了一...

    java中的序列化与反序列化

    Java中的序列化与反序列化是Java编程语言中用于处理对象状态持久化和网络传输的重要技术。序列化是指将一个Java对象转换为字节流的过程,这样就可以将对象的状态保存到磁盘上或者通过网络传输。反序列化则是将字节流...

    java序列化全解

    总的来说,Java序列化是Java程序设计中一个强大的工具,它使得对象能够在不同的环境中持久化和复制,从而扩展了Java应用程序的灵活性和可移植性。理解并熟练掌握序列化机制对于高级软件开发者来说是非常重要的。

    Java实现序列化例子

    在Java中,一个基本的序列化操作通常包括两个步骤:对象的序列化(写入)和反序列化(读取)。 1. **对象序列化**: - 创建可序列化的类:首先,你需要定义一个类,并且在类声明中加入`implements Serializable`,...

    java 序列化时排除指定属性

    在Java编程中,序列化是将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。这个过程使得对象可以在不同的时间或者不同的系统之间进行恢复。然而,有时候我们不希望序列化对象的所有属性,可能是因为某些...

    Java序列化的机制和原理

    总之,Java序列化是一个强大的工具,它使得对象能够在不同的环境之间交换和恢复,但同时也需要注意安全问题,因为序列化可能暴露敏感信息。为了提高效率和安全性,有时可以考虑使用自定义的序列化方法或者其他的序列...

Global site tag (gtag.js) - Google Analytics