`
manwuyuantao
  • 浏览: 8006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java编程语言-序列化和反序列化

 
阅读更多

 

1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

 

下面再给个jdk宝典里的例子吧,这样你就应该知道怎么用了:

package book.io;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
/**
* 序列化和反序列化对象
*/
public class SerializeObject {
//一个内部类,用于被序列化和反序列化。
//一定要实现Serializable才能够被序列化和反序列化。
static class MyClass implements Serializable{
//一般的实例变量会被序列化和反序列化
private int a,b;
//transient实例变量 不会 被序列化和反序列化
private transient int c;
// 类变量 不会 被序列化和反序列化
private static int d;
public MyClass(){
}
public MyClass(int a, int b, int c, int d){
this.a = a;
this.b = b;
this.c = c;
MyClass.d = d;
}
public String toString(){
return this.a + " " + this.b + " " + this.c + " " + MyClass.d;
}
}

/**
* 序列化对象到文件
*/
public static void serialize(String fileName) throws Exception{
//创建一个对象输出流,将对象输出到文件
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
//序列化一个字符串对象到文件
out.writeObject("Today:");
//序列化当前日期对象到文件
out.writeObject(new Date());
//序列化一个MyClass对象
MyClass my1 = new MyClass(5, 6, 7, 8);
out.writeObject(my1);
out.close();
}
/**
* 从文件反序列化到对象
*/
public static void deserialize(String fileName) throws Exception{
//创建一个对象输入流,从文件读取对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
//注意读对象时必须按照序列化对象时的顺序读,否则会出错
//读取字符串对象
String today = (String)(in.readObject());
System.out.println(today);
//读日期对象
Date date = (Date)(in.readObject());
System.out.println(date.toString());
//读MyClass对象,并调用它的add方法。
MyClass my1 = (MyClass)(in.readObject());
System.out.println(my1.toString());
in.close();
//当恢复对象的时候,对象中的所有域被自动的恢复。如果不希望某个域被序列化,可以在它前面
//加上transient关键字,例如下面的代码:transient int noSer = 0;
//类似的,如果类中的某个域为静态,它不会被序列化。
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
String fileName = "c:/temp/MyClass.ser";
SerializeObject.serialize(fileName);
//注释掉第二行,只运行下面一行,将会发现输出不同
SerializeObject.deserialize(fileName);
}
}

分享到:
评论

相关推荐

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

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

    C#和Java的序列化反序列化

    总结来说,C#和Java的序列化和反序列化机制都是各自语言中不可或缺的一部分,它们使得数据能够在不同环境之间自由流动。理解和掌握这些技术对于任何软件开发者来说都是非常重要的,特别是涉及到数据持久化、网络通信...

    java对象序列化和反序列化

    Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...

    对象-序列化-反序列化相关资料

    对象的序列化与反序列化是计算机编程中的关键概念,特别是在数据存储、网络传输和状态持久化等场景中。这两个过程对于理解数据处理流程至关重要。 序列化是指将一个对象的状态转换为可存储或可传输的形式,通常是...

    03-03-02-序列化和反序列化1

    在Java编程中,序列化(Serialization)和反序列化(Deserialization)是将对象转换为字节流和从字节流恢复对象的过程,这在多种场景下非常有用,例如持久化存储、网络传输或者跨进程通信。在本例中,我们将讨论如何...

    java程序,序列化和反序列化操作对文件的运用

    在Java编程语言中,序列化和反序列化是两种重要的技术,它们允许我们将对象的状态转换为字节流,以便存储到磁盘上或通过网络进行传输。这些技术在处理持久化数据、对象缓存以及跨进程通信(如RMI - 远程方法调用)时...

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

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们允许我们将对象的状态转换为可存储或传输的格式,然后再恢复为原始对象。这个过程对于数据持久化、网络传输以及跨进程通信等场景非常有用。下面将...

    protobuf序列化和反序列化技术

    开发者应该熟悉protobuf的语法规则,掌握如何定义消息类型,以及如何在不同编程语言中使用生成的代码进行序列化和反序列化操作。对于大型团队,规范化的protobuf定义管理和版本控制也是必不可少的,以确保不同模块...

    学生管理系统(序列化和反序列化)

    在本项目中,“学生管理系统(序列化和反序列化)”是一个基于Java或类似编程语言实现的系统,其核心功能是有效地存储和恢复学生信息。序列化和反序列化是这个系统的关键技术,它们允许程序将对象的状态转化为可存储...

    商业编程-源码-序列化文档以及鼠标画简单图形.zip

    在Java中,我们可以使用`ObjectOutputStream`和`ObjectInputStream`进行序列化和反序列化;在Python中,可以使用pickle或json库;在C#中,有`BinaryFormatter`类等。 接下来,我们谈谈鼠标画简单图形。在GUI编程中...

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

    Java对象的序列化和反序列化是Java编程中的一项重要技术,主要应用于数据持久化、网络传输等场景。本课件详细介绍了这一概念及其在实际应用中的操作。 首先,序列化是将Java对象转化为字节序列的过程,目的是为了...

    Protocol Buffer序列化对比Java序列化.

    - Java序列化:Java序列化虽然方便,但生成的数据量较大,且序列化和反序列化速度相对较慢。 2. 数据结构: - Protocol Buffer:PB允许定义自己的数据结构(消息类型),通过.proto文件进行描述,支持基本数据...

    java中的序列化与反序列化

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

    Java对象的序列化与反序列化Java开发Java经验技巧

    Java对象的序列化与反序列化是Java编程中一项重要的技术,它允许我们将Java对象转换为字节流,便于存储、传输或者在网络间传递。这一过程对于数据持久化、跨进程通信(如RMI,Remote Method Invocation)以及分布式...

    java反序列化利用程序UI版Beta1.1.rar

    如"java反序列化利用程序UI版Beta1.1"这样的工具,可能是为了帮助安全研究人员测试和理解反序列化漏洞的工作原理,通过图形用户界面(GUI)提供了一种更直观的方式来实验和分析Java反序列化过程。 9. **安全编程...

    ProtoBuf的介绍以及在Java中使用protobuf将对象进行序列化与反序列化示例代码.rar

    ProtoBuf作为高效的数据序列化工具,在Java和其他编程语言中都有广泛的应用。它简化了数据交换和存储,提高了性能,减少了网络传输的数据量。在实际项目中,结合Netty等网络通信框架,ProtoBuf能进一步提升网络通信...

    Java序列化和反序列化

    序列化是Java编程语言中的一项核心功能,其主要目的是将对象的状态转换为可以存储或传输的格式,便于持久化保存或网络传输。序列化并不涉及对象的方法,而是专注于对象的实例变量,也就是对象的数据成员。这一过程...

    Java序列化_Java序列化结构_

    Java序列化是Java平台中的一种持久...总的来说,Java序列化是Java编程中一个重要的特性,但它也有其局限性和安全风险。理解和熟练掌握序列化机制,以及知道如何避免其潜在问题,对于任何Java开发者来说都是至关重要的。

    序列化与反序列化Demo

    在这个"序列化与反序列化Demo"中,我们将深入探讨这两个过程以及它们在Java编程语言中的实现。 首先,让我们理解为什么要进行序列化。在Java中,序列化的主要用途包括: 1. 数据持久化:将对象的状态保存到磁盘,...

Global site tag (gtag.js) - Google Analytics