(一)序列化作用:
把内存中的对象转化为另一种形式,以供传输或存储。
(二)序列化前提:
(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中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...
Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...
**一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节数组,以便写入磁盘或通过网络发送。 2. **为什么需要...
三、如何实现Java序列化 要使一个类及其所有子类可序列化,只需在类定义中添加`implements Serializable`即可。例如: ```java public class MyClass implements Serializable { // class members } ``` 对于类中...
### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...
Java序列化是Java平台中的一种核心机制,它允许对象的状态被转换成字节流,以便存储到磁盘、数据库,或者在网络中进行传输。这对于实现持久化、远程方法调用(RMI)以及Enterprise JavaBeans(EJB)等高级功能至关...
通过实例深入了解 Java 序列化 Java 序列化是 Java 系列技术中一个较为重要的技术点,用于将 Java 对象序列化为二进制文件。开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和...
通过实现`java.io.Serializable`接口,一个类的实例就能被序列化。 2. **默认序列化过程** 默认情况下,序列化会保存对象的所有实例变量,但不包括静态变量。这是因为静态变量属于类,而非特定的对象实例。序列化...
在Java中,如果一个类想要实现序列化,它必须实现`Serializable`接口。这个接口是一个标记接口,不包含任何方法,它的存在只是为了表明该类的对象是可以被序列化的。例如: ```java public class MyClass ...
Java序列化是Java平台提供的一种持久化机制,它允许我们将一个Java对象转换为字节流,以便存储到磁盘上,或者通过网络进行传输。这使得我们可以保存和恢复对象的状态。实现序列化的类需要实现`Serializable`接口,...
`Serializable`接口是一个空接口,当一个类实现它时,表明该类的所有实例都可以被序列化。而`Externalizable`接口提供了更多的控制权,允许开发者自定义序列化和反序列化的过程。 实现`Serializable`接口的示例如下...
对于java原生序列化,我们使用了ObjectOutputStream和ObjectInputStream来实现序列化和反序列化,而对于Kryo序列化,我们使用了Kryo序列化器来实现序列化和反序列化。 6. 序列化的应用:序列化有很多实际应用,例如...
在Java中,实现对象序列化主要依靠实现`java.io.Serializable`接口。本文将深入探讨Java对象序列化的原理、用途和注意事项。 **一、序列化原理** 1. **实现Serializable接口**: 对象要能够被序列化,它所在的类...
Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象能够在不同的平台之间进行传输,并且能够保持其原始状态。 *...
Java反序列化安全漏洞是一种严重的安全威胁,它主要发生在Java程序处理序列化数据时。序列化是Java中的一种机制,可以将对象状态转换为字节流,以便存储或传输。反序列化则是将字节流恢复为Java对象的过程。 在Java...
一旦类实现了`Serializable`接口,Java的序列化机制就可以将对象实例转换为字节数组。这通常通过`ObjectOutputStream`的`writeObject()`方法完成: ```java User user = new User("NiceGege", 30); try ...
当一个类实现此接口时,它的实例可以被序列化。在某些情况下,我们可能希望将这些序列化对象以XML格式存储,以便于阅读和编辑。`java.beans`包中的`XMLEncoder`和`XMLDecoder`就是为此目的设计的。 `XMLEncoder`是...
- **持久化存储**:对象的状态可以被序列化并保存到磁盘上,之后可以从磁盘上读取并反序列化回内存中的对象实例。 - **重要性**:在现代软件开发尤其是分布式系统和微服务架构中,反序列化技术对于实现高效的数据...