首先解释两个概念,何为序列化?何为反序列化?
序列化:将对象转化成流的过程称为序列化
反序列化:将流转化成对象的过程称之为反序列化
序列化与反序列化必须遵守的原则
a)Java对象
在java中要想使一个java对象可以实现序列化与反序列化,必须让该类实现java.io.Serializable接口
java.io.Serializable接口定义如下:
publicinterfaceSerializable {
}
|
从上述定义中可以看到该接口中未定义任何方法,这大大的简化了开发者
b)序列化主要依赖java.io.ObjectOutputStream类,该类对java.io.FileOutputStream进一步做了封装,这里主要使用ObjectOutputStream类的writeObject()方法实现序列化功能
Demo:
/**
*将对象序列化到磁盘文件中
*@paramo
*@throwsException
*/
publicstaticvoidwriteObject(Object o)throwsException{
File f=newFile("d:""user.tmp");
if(f.exists()){
f.delete();
}
FileOutputStream os=newFileOutputStream(f);
//ObjectOutputStream核心类
ObjectOutputStream oos=newObjectOutputStream(os);
oos.writeObject(o);
oos.close();
os.close();
}
|
c)反序列化主要依赖java.io.ObjectInputStream类,该类对java.io.InputStream进一步做了封装,这里主要使用ObjectInputStream类的readObject()方法实现序列化功能
Demo:
/**
*反序列化,将磁盘文件转化为对象
*@paramf
*@return
*@throwsException
*/
publicstaticUser readObject(File f)throwsException{
InputStream is=newFileInputStream(f);
//ObjectOutputStream核心类
ObjectInputStream ois=newObjectInputStream(is);
return(User)ois.readObject();
}
|
贴出完整的demo
Java对象:
packagecom.io.bean;
importjava.io.Serializable;
publicclassUserimplementsSerializable{
privateintuserId;
privateStringuserName;
privateStringuserSex;
privateintuserAge;
publicintgetUserAge() {
returnuserAge;
}
publicvoidsetUserAge(intuserAge) {
this.userAge= userAge;
}
publicintgetUserId() {
returnuserId;
}
publicvoidsetUserId(intuserId) {
this.userId= userId;
}
publicString getUserName() {
returnuserName;
}
publicvoidsetUserName(String userName) {
this.userName= userName;
}
publicString getUserSex() {
returnuserSex;
}
publicvoidsetUserSex(String userSex) {
this.userSex= userSex;
}
@Override
publicString toString() {
returnthis.getUserId() +" "+this.getUserName()
+" "
+this.getUserSex() +" "+this.getUserAge();
}
}
|
序列化与反序列化
packagecom.io.test;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importcom.io.bean.User;
publicclassTestSerializable {
/**
*将对象序列化到磁盘文件中
*@paramo
*@throwsException
*/
publicstaticvoidwriteObject(Object o)throwsException{
File f=newFile("d:""user.tmp");
if(f.exists()){
f.delete();
}
FileOutputStream os=newFileOutputStream(f);
//ObjectOutputStream核心类
ObjectOutputStream oos=newObjectOutputStream(os);
oos.writeObject(o);
oos.close();
os.close();
}
/**
*反序列化,将磁盘文件转化为对象
*@paramf
*@return
*@throwsException
*/
publicstaticUser readObject(File f)throwsException{
InputStream is=newFileInputStream(f);
//ObjectOutputStream核心类
ObjectInputStream ois=newObjectInputStream(is);
return(User)ois.readObject();
}
publicstaticvoidmain(String[] args)throwsException{
/*****************将对象序列化***************/
/*
User user=new User();
user.setUserId(1);
user.setUserName("张艺谋");
user.setUserSex("男");
user.setUserAge(50);
TestSerializable.writeObject(user);
*/
/*****************将对象序反列化***************/
User user=TestSerializable.readObject(newFile("d:""user.tmp"));
System.out.println(user);
}
}
|
分享到:
相关推荐
标题中的“jackson库实现定制化的java序列化反序列化操作”指的是利用Jackson库的能力,通过自定义规则来控制对象的序列化和反序列化过程。这通常涉及到创建自定义的`JsonSerializer`和`JsonDeserializer`,或者使用...
java 序列化和反序列化的方法 Java 序列化和反序列化是 Java 语言中的一种机制,用于将对象转换为字节流,以便在网络上传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在...
Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...
而在Java中,我们可以通过实现`Serializable`接口来使类支持序列化,或者使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`进行对象的序列化和反序列化。 接下来,我们讨论反序列化。反序列化是序列...
Java序列化和反序列化是Java开发中常见且重要的概念,它们主要用于对象的状态持久化以及在不同系统间传递数据。本库专注于将Java对象转换为JSON格式,这在Web服务、API开发、数据存储和传输等方面都有广泛的应用。...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...
Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
### Java序列化与反序列化详解 #### 一、Java序列化概述 Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象...
Java序列化是Java平台中的一种持久化机制,它允许对象的状态被转换成字节流,以便存储、网络传输或在不同时间点恢复。这个过程被称为序列化,而反向操作称为反序列化。序列化在许多场景下都非常有用,比如在分布式...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...
**一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节数组,以便写入磁盘或通过网络发送。 2. **为什么需要...
Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化
Java序列化是Java平台中的一种标准机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络进行传输或者在某些时候恢复原来的对象状态。这一过程包括两个主要步骤:对象的序列化(将对象转换为字节流)和反...
- Java序列化:Java序列化虽然方便,但生成的数据量较大,且序列化和反序列化速度相对较慢。 2. 数据结构: - Protocol Buffer:PB允许定义自己的数据结构(消息类型),通过.proto文件进行描述,支持基本数据...
Java序列化反序列化原理及漏洞解决方案 Java序列化反序列化原理及漏洞解决方案是Java编程语言中的一项重要机制,该机制允许将Java对象转换为字节序列,以便在网络上传输或存储在文件中。同时,Java也提供了反序列化...
Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...
Java序列化是Java平台提供的一种持久化机制,它允许我们将一个Java对象转换为字节流,以便存储到磁盘上,或者通过网络进行传输。这使得我们可以保存和恢复对象的状态。实现序列化的类需要实现`Serializable`接口,...
Java序列化是Java平台中的一种核心机制,它允许对象的状态被转换成字节流,以便存储到磁盘、数据库,或者在网络中进行传输。这对于实现持久化、远程方法调用(RMI)以及Enterprise JavaBeans(EJB)等高级功能至关...