问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中如何实现序列化,有什么意义

发布网友 发布时间:2022-02-28 23:28

我来回答

7个回答

懂视网 时间:2022-03-01 03:50

Java中的序列化是把Java对象转换为字节序列的过程,Java中的序列化机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化到存储数据库或文件系统中,然后在需要的时候通过字节流中的信息来重构一个相同的对象。

java的序列化方便传输而且速度快,还很安全,调用方反序列化即可拿到传输前最原始的java对象,其主要用途有两种,一种是把对象的字节序保存到硬盘上,另一种是在网络上传送对象的字节序列。

Java是一种编程语言,可以编写桌面应用程序、Web应用程序等,它吸收了C++语言的各种优点,还摒弃了C++里难以理解的概念,具有功能强大和简单易用等特点。

总结:Java中的序列化是把Java对象转换为字节序列的过程,Java中的序列化机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化到存储数据库或文件系统中,然后在需要的时候通过字节流中的信息来重构一个相同的对象。

热心网友 时间:2022-03-01 00:58

java 中实现序列化,只要实现Serializbale这个接口,那么这个类就能序列化了。
序列化就是把对象转化为二进制编码,有两个作用1.用于网络传输。2.可以存储到硬盘中,用来保存。类对象都是在内存中的,当系统关闭后对象就没了,下次启动时重新生成对象,不能保存当时状态。
有序列化,就有反序列化,反序列化就是恢复当时状态的类对象。

热心网友 时间:2022-03-01 02:16

实现Serializable接口就行了,这个接口只是一个标记接口,不提供任何方法,Java序列化意义就是把Java在内存中的对象按照一定的格式以字节流的方式传输到别的地方,相当于传输协议,不然就会造成接收端数据错乱。
就像我和你打电话,你只能听懂中文,我硬是用英文跟你说了一大堆,在你看来那些英文就是一堆乱码,

热心网友 时间:2022-03-01 03:50

一般需要序列化的都是实体类,只需要实现Serializable接口即可,意义在让java对象能够存到硬盘内存上,同时还能取出来变成一个java对象,底层实现还是IO流,具体就不知道了,小白一个

热心网友 时间:2022-03-01 05:42

首先我们要把准备要序列化类,实现 Serializabel接口
例如:我们要Person类里的name和age都序列化
import java.io.Serializable;

public class Person implements Serializable { //本类可以序列化
private String name ;
private int age ;

public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ",年龄" + this.age ;
}
}
然后:我们将name和age序列化(也就是把这2个对象转为二进制,统族理解为“打碎”)
package org.lxh.SerDemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream ;
public class ObjectOutputStreamDemo { //序列化
public static void main(String[] args) throws Exception {
//序列化后生成指定文件路径
File file = new File("D:" + File.separator + "person.ser") ; ObjectOutputStream oos = null ;
//装饰流(流)
oos = new ObjectOutputStream(new FileOutputStream(file)) ;

//实例化类
Person per = new Person("张三",30) ; oos.writeObject(per) ;//把类对象序列化
oos.close() ;
}
}

热心网友 时间:2022-03-01 07:50

序列化的过程就是对象写入字节流和从字节流中读取对象。
java对象序列化可以保留一个对象的数据,而且还可以递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的“深复制”,即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。

热心网友 时间:2022-03-01 10:14

二.实现java对象的序列化和反序列化。
Java对象的序列化有两种方式。
a.是相应的对象实现了序列化接口Serializable,这个使用的比较多,对于序列化接口Serializable接口是一个空的接口,它的主要作用就是
标识这个对象时可序列化的,jre对象在传输对象的时候会进行相关的封装。这里就不做过多的介绍了。
下面是一个实现序列化接口的Java序列化的例子:非常简单

package com.shop.domain;

import java.util.Date;

public class Article implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String title; //文章标题
private String content; // 文章内容
private String faceIcon;//表情图标
private Date postTime; //文章发表的时间
private String ipAddr; //用户的ip

private User author; //回复的用户

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFaceIcon() {
return faceIcon;
}
public void setFaceIcon(String faceIcon) {
this.faceIcon = faceIcon;
}
public Date getPostTime() {
return postTime;
}
public void setPostTime(Date postTime) {
this.postTime = postTime;
}
public User getAuthor() {
return author;
}
public void setAuthor(User author) {
this.author = author;
}
public String getIpAddr() {
return ipAddr;
}
public void setIpAddr(String ipAddr) {
this.ipAddr = ipAddr;
}

}

没错,Externlizable接口继承了java的序列化接口,并增加了两个方法:
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
首先,我们在序列化对象的时候,由于这个类实现了Externalizable 接口,在writeExternal()方法里定义了哪些属性可以序列化,
哪些不可以序列化,所以,对象在经过这里就把规定能被序列化的序列化保存文件,不能序列化的不处理,然后在反序列的时候自动调
用readExternal()方法,根据序列顺序挨个读取进行反序列,并自动封装成对象返回,然后在测试类接收,就完成了反序列。
所以说Exterinable的是Serializable的一个扩展。
为了更好的理解相关内容,请看下面的例子:
package com.xiaohao.test;

import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
* 测试实体类
* @author 小浩
* @创建日期 2015-3-12
*/
class Person implements Externalizable{
private static final long serialVersionUID = 1L;<br> String userName;
String password;
String age;

public Person(String userName, String password, String age) {
super();
this.userName = userName;
this.password = password;
this.age = age;
}

public Person() {
super();
}

public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

/**
* 序列化操作的扩展类
*/
@Override
public void writeExternal(ObjectOutput out) throws IOException {
//增加一个新的对象
Date date=new Date();
out.writeObject(userName);
out.writeObject(password);
out.writeObject(date);
}

/**
* 反序列化的扩展类
*/
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
//注意这里的接受顺序是有*的哦,否则的话会出错的
// 例如上面先write的是A对象的话,那么下面先接受的也一定是A对象...
userName=(String) in.readObject();
password=(String) in.readObject();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=(Date)in.readObject();
System.out.println("反序列化后的日期为:"+sdf.format(date));

}
@Override
public String toString() {
//注意这里的年龄是不会被序列化的,所以在反序列化的时候是读取不到数据的
return "用户名:"+userName+"密 码:"+password+"年龄:"+age;
}
}

/**
* 序列化和反序列化的相关操作类
* @author 小浩
* @创建日期 2015-3-12
*/
class Operate{
/**
* 序列化方法
* @throws IOException
* @throws FileNotFoundException
*/
public void serializable(Person person) throws FileNotFoundException, IOException{
ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream("a.txt"));
outputStream.writeObject(person);
}

/**
* 反序列化的方法
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public Person deSerializable() throws FileNotFoundException, IOException, ClassNotFoundException{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt"));
return (Person) ois.readObject();
}

}
/**
* 测试实体主类
* @author 小浩
* @创建日期 2015-3-12
*/
public class Test{
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
Operate operate=new Operate();
Person person=new Person("小浩","123456","20");
System.out.println("为序列化之前的相关数据如下:\n"+person.toString());
operate.serializable(person);
Person newPerson=operate.deSerializable();
System.out.println("-------------------------------------------------------");
System.out.println("序列化之后的相关数据如下:\n"+newPerson.toString());
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 java 中的序列化是什么意思?有什么好处 全国计算机技术与软件专业技术资格考试多少分及格 盐城大纵湖有哪些特产 盐城特产是什么? 盐城有什么特产茶叶 盐城有哪些工艺品类特产 盐城有什么土特产? 盐城十大特产有哪些 怎么学C语言? 新手学C语言怎样打好基础 c语言应该怎么学? 怎样学习C语言最快?? 绍兴有什么零食类特产 绍兴十大美食都有什么? 绍兴特产有哪些可带走? “信息系统项目管理师”考试是不是对工作经验还有要求 我要参加软考信息系统项目管理师考试,想参加个培训值得吗? 信息系统项目管理师考试什么时候可以报名? 高级职称包括副高吗 副高属于高级职称吗 高级工程师相当于什么级别待遇 关于对Java序列化的理解。 java里实现了Serializable接口,序列化是什么意思呢 java中什么是序列化,怎么通俗理解序列化和反序列化? 什么是java的序列化 考CCIE需要什么证件, 如何申请思科电子版证书 java的特点有哪些? Java语言的特点 Java语言的特点主要有什么内容 JAVA中的关键字有什么特点 photoshop怎么换照片底色 数据库系统工程师难考吗 软考软件设计师的就业前景如何? 如何才能成为合格的软件设计师? windows键盘锁住了怎么解锁 微软笔记本电脑键盘锁住了怎么解锁 机械师笔记本键盘锁住了怎么解锁 笔记本电脑键盘锁住了怎么解锁 笔记本键盘锁怎么解锁 笔记本电脑键盘锁了,怎么解锁?