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

什么是java的序列化和反序列化?

发布网友 发布时间:2022-02-28 14:20

我来回答

3个回答

懂视网 时间:2022-02-28 18:41

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

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

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

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

热心网友 时间:2022-02-28 15:49

1、什么是序列化?为什么要序列化?
Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。
我们都知道,在进行浏览器访问的时候,我们看到的文本、图片、音频、视频等都是通过二进制序列进行传输的,那么如果我们需要将Java对象进行传输的时候,是不是也应该先将对象进行序列化?答案是肯定的,我们需要先将Java对象进行序列化,然后通过网络,IO进行传输,当到达目的地之后,再进行反序列化获取到我们想要的对象,最后完成通信。
2、如何实现序列化
2.1、使用到JDK中关键类 ObjectOutputStream 和ObjectInputStream
ObjectOutputStream 类中:通过使用writeObject(Object object) 方法,将对象以二进制格式进行写入。
ObjectInputStream 类中:通过使用readObject()方法,从输入流中读取二进制流,转换成对象。
2.2、目标对象需要先实现 Seriable接口
我们创建一个Student类:
public class Student implements Serializable {
private static final long serialVersionUID = 3404072173323892464L;
private String name;
private transient String id;
private String age;

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", age='" + age + '\'' +
'}';
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public Student(String name, String id) {
System.out.println("args Constructor");
this.name = name;
this.id = id;
}

public Student() {
System.out.println("none-arg Constructor");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

}

代码中Student类实现了Serializable 接口,并且生成了一个版本号:
private static final long serialVersionUID = 3404072173323892464L;

首先:
1、Serializable 接口的作用只是用来标识我们这个类是需要进行序列化,并且Serializable 接口中并没有提供任何方法。
2、serialVersionUid 序列化版本号的作用是用来区分我们所编写的类的版本,用于判断反序列化时类的版本是否一直,如果不一致会出现版本不一致异常。
3、transient 关键字,主要用来忽略我们不希望进行序列化的变量
2.3、将对象进行序列或和反序列化
如果你想学习Java可以来这个群,首先是一二六,中间是五三四,最后是五一九,里面有大量的学习资料可以下载。
2.3.1 第一种写入方式:

public static void main(String[] args){
File file = new File("D:/test.txt");
Student student = new Student("孙悟空","12");
try {
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(student);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}

try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
Student s = (Student) objectInputStream.readObject();
System.out.println(s.toString());
System.out.println(s.equals(student));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

创建对象Student ,然后通过ObjectOutputStream类中的writeObject()方法,将对象输出到文件中。
然后通过ObjectinputStream 类中的readObject()方法反序列化,获取对象。
2.3.2 第二种写入方式:
在Student 类中实现writeObject()和readObject()方法:
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeUTF(id);

}

private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
id = objectInputStream.readUTF();
}

通过这中方式进行序列话,我们可以自定义想要进行序列化的变量,将输入流和输出流传入对线实例中,然后进行序列化以及反序列化。

热心网友 时间:2022-02-28 17:07

把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
步步高学习机@iboxH2 H2学习机的屏幕大小? 6-7万左右纯电 女生想买台便宜的小车在城市代步,有什么好推荐?电动车最好? 河南德盛智能环保科技有限公司怎么样? 深圳市德盛铭电科技有限公司怎么样? pvc防水门生产厂家哪个好呢? 晋江市德顺陶瓷建材有限公司简介 酒店家具厂家 梨子酿酒最简单的方法 什么是Java序列化?如何实现序列化? java中的序列化是什么意思 面试题:什么是java的序列化 什么是java序列化,如何实现java序列化? 什么是java序列化,如何实现java序列化 什么是java序列化,如何实现java序列化? 江苏常州有哪些特产? 江苏特产小吃 江苏有什么水果特产 江苏有什么特产或小吃 江苏特产有哪些 江苏有什么特产茶叶 江苏有什么特产可以带回来的 江苏特产有哪些土特产 江苏省有什么特产 江苏特产有哪些吃的可以带走的? 江苏特产是什么? 江苏有什么好吃的特产,要是非常有名的。 江苏特产有哪些可以带走的 江苏特产是什么 JAVA中,序列化是指的什么?有何用途? 什么是java序列化 csdn 、什么是java序列化,如何实现java序列化?或者请解 释Serializable接口的作用。 什么是java序列化 什么是java的序列化?jdk如何实现java序列化 什么是Java中的序列化和反序列化? 什么是java序列化,如何实现序列化 java序列化有什么作用? java序列化的优点和缺点是什么? Java简述 java中的序列化是什么意思 在JAVA中什么叫序列化和反序列化? 在JAVA中什么叫序列化和反序列化 什么是序列化,在java中如何实现序列化? java 中的序列化是什么意思 java 中的序列化是什么意思?有什么好处? 在java中什么叫做类的序列化 什么是java的序列化,如何实现java序列化 JAVA你知道后端都要学习些什么吗? JAVA后端应该学什么技术? java开发需要学习什么?