java.io.Serializable的本质就是将内存的对象,以文本的形式保存到磁盘上,使用的时候再读出来,以减少应用程序的压力.有点类似与虚拟内存.在openJPA里,entity的时候,一般需要使用.
序列化的时候有以下几点需要注意.
1)先序列化,先读取(FIFO);
2)反序列化的时候,返回的都是Object,要自动转换类型;
3)用关键字transient标记的属性,将不被序列化;
4)对象要继承类java.io.Serializable;
5)序列化用ObjectOutputStream,反序列化用ObjectInputStream;
下面是2个示例代码,一看就能明白,本人不做过多的解释^_^
package test;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private transient int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "name=" + name + "\n" + "age=" + age;
}
}
package test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
public class TestSerializable {
public static void main(String[] args) {
String path = "c:\\myfile";
serialize(path);
System.out.println("Object is serializing!");
deSerialize(path);
}
public static void serialize(String fileName) {
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
out.writeObject("phl");// 序列化字符串对象
out.writeObject(new Date());// 序列化日期对象
User user = new User("phl", 26);
out.writeObject(user);// 序列化自定义对象
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deSerialize(String fileName) {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
String name = (String) in.readObject();
Date date = (Date) in.readObject();
User user = (User) in.readObject();
System.out.println(name);
System.out.println(date);
System.out.println(user.toString());
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
运行结果:
Object is serializing!
phl
Fri Sep 03 19:44:47 CST 2010
name=phl
age=0
分享到:
相关推荐
### Java.io.Serializable 序列化问题详解 #### 一、序列化的概念与作用 在 Java 编程语言中,序列化是一种将对象的状态(即成员变量的值)转换为可以存储或传输的形式的过程。通常,这种形式是字节流,但也可以是...
在Java序列化过程中,经常会遇到`java.io.InvalidClassException`异常,特别是在序列化类时如果类的版本与反序列化环境中的类版本不一致的情况下。此类异常通常是因为序列化运行时所期望的序列化标识符...
NotSerializableException 是 Java 中的一个异常,它发生在尝试序列化一个不implement Serializable 接口的对象时。今天,我们将讨论 Java 中序列化 NotSerializableException 问题的解决办法。 问题描述 --------...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...
Java.io包支持对象的序列化和反序列化,通过实现`Serializable`接口,可以将对象转换为字节流,便于存储或网络传输。 7. **文件操作**: `File` 类是文件和目录操作的主要接口,可以创建、删除、重命名文件和目录...
- `java.io.Serializable` 是Java序列化的基础,任何类如果想要实现序列化,就必须实现这个接口。这个接口是一个标记接口,没有定义任何方法,只是表明该类的对象可以被序列化。 3. **序列化流程** - 使用 `java....
要实现Java对象的序列化,首先需要让对象所属的类实现`java.io.Serializable`接口。这个接口是一个标记接口,不包含任何方法,它的作用是告诉Java虚拟机该类的对象是可以被序列化的。例如: ```java import java.io...
在Java中,要实现对象的序列化,类必须实现`java.io.Serializable`接口。这个接口没有任何方法,仅仅作为一个标记,告诉Java虚拟机(JVM)这个类是可序列化的。 有两种主要的序列化方式: 1. 实现`Serializable`...
Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io....
2. **接口**: 实现序列化的类需要实现`java.io.Serializable`接口。这个接口是一个标记接口,没有定义任何方法,但是通过实现这个接口,表明类的对象是可以被序列化的。 3. **过程**: - 序列化:使用`java.io....
另外,还有`java.io.Externalizable`接口,它继承自`Serializable`,但提供了更细粒度的控制权,允许类自定义序列化和反序列化的行为。如果一个类实现了`Externalizable`,则需要手动实现`writeExternal...
Java平台提供的`io`包为开发者提供了访问文件系统、对象序列化等功能的基本输入输出能力。它主要包括字节流、字符流及对象流(字节流的包装类)。此外,还提供了一些基本的文件访问功能。虽然这些功能在性能和灵活性...
### Java序列化(Serializable)与反序列化详解 #### 序列化概念与应用场景 序列化是指将程序中的对象转换为一系列字节序列的过程,主要用于保存对象的状态以便将来使用或者在网络之间传输对象。Java提供了内置的...
### Java序列化与反序列化详解 #### 一、Java序列化概述 Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象...
3. `java.io.NotSerializableException`: 当尝试序列化一个未实现Serializable接口的对象时抛出的异常。 4. `sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`(非标准API):用于将字节数组编码为Base64字符串,...
这个过程涉及到`java.io.Serializable`接口,任何需要被序列化的类都必须实现这个接口。以下是一个简单的序列化和反序列化的例子: ```java import java.io.*; class Student implements Serializable { String ...
### Java Serializable(序列化)的理解和总结 #### 一、序列化的定义与目的 序列化是一种将对象的状态转换为可以存储或传输的形式的过程。在Java中,如果一个类实现了`Serializable`接口,那么该类的对象就可以被...
而在Java中,我们可以通过实现`Serializable`接口来使类支持序列化,或者使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`进行对象的序列化和反序列化。 接下来,我们讨论反序列化。反序列化是序列...
在 serializable-prj 项目中,可能包含了各种示例代码,展示了如何在Java中实现和使用序列化功能。 综上所述,Java的序列化和外部化是实现对象持久化和跨进程通信的关键技术。理解并熟练掌握这些概念,能够帮助...