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

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

发布网友 发布时间:2022-04-24 06:37

我来回答

2个回答

热心网友 时间:2022-04-13 01:31

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-04-13 02:49

把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为freebuds4i切歌怎么操作_华为freebuds4i怎么切歌 华为freebuds pro切歌方法_华为freebuds pro怎么切歌 华为耳机怎么切换下一曲 欧美电影,好像是宠物有一个世界,宠物会想办法跟主人的灵魂互换占据 ...的名字,欧洲中世纪,一个王子的继母把他的灵魂和狗的灵魂互换了... 问一部外国电影的名字 剧情记得不大清楚l了 是前几年的片子 灵魂互换的... HUAWEI 华为 AGS2-W09 10.1英寸平板电脑 (香槟金、64GB+4GB、WiFi版... 诛仙3百法和千法差距大吗 微信怎么解除应用授权登录 授权应用删除方法 微信怎么解除应用授权登录授权应用删除方法 JAVA中,序列化是指的什么?有何用途? 面试题:什么是java的序列化 java中什么是序列化,怎么通俗理解序列化和反序列化? 最好的寿险公司排名 我想买份保险,亲们觉得哪个保险公司比较好? 终身寿险适合谁,哪款性价比最高 性价比最高的定期寿险 泰康人寿岁添福终身寿险性价比高吗?靠谱吗? 现在哪家保险公司的性价比比较高?能推荐一下吗? 苹果手机视频播放不了画面卡住了是怎么回事? 苹果手机突然不能播放视频是怎么回事?如何解决? 苹果手机有时候突然会不能从网页看视频 就像不加载一样 会出画面但不动什么原因? iphone正在准备视频卡住了 苹果手机视频播放不了是什么原因? 苹果11手机微信视频如果一直不动会不会退到后台或者锁屏? iphone微信视频退出不动 苹果手机看视频,打开视频后就不动了 苹果手机视频看几秒就不动了 iphone一开视频就卡住 柚子有硬心是怎么回事 java 中的序列化是什么意思?有什么好处 什么是Java中的序列化和反序列化? 问一下 java中的序列化是什么意思?? 有什么作用?? 在手机APP上怎么才能买到火车卧铺下铺票? 怎么在12306火车票网上订票官网订到卧铺下铺车票 怎么能在网上订到下铺票?还有卧铺出票有什么规律? 12306怎么订购下卧铺车票? 在手机12306网站,要订火车票卧铺下铺怎么订 隐形音响的优缺点是什么?有哪些牌子? 阿米纳隐形音响怎么样? 用阿米纳隐形音响来做家庭影院音响系统怎么样? 有没有什么隐形音箱品牌,用在私人影院上比较好的? Amn阿米纳隐形音箱开裂怎么解决? 隐形音响在私人会所装怎么样? 隐形音响的音质怎么样? 求推荐隐形音箱,详细点的 赫斯*音响,阿米纳*音响,安美莱*音响在江苏哪里有体验厅?我要体验一下哪个牌子效果好点 江苏苏州有赫斯隐形音箱的效果可以体验吗? 目前最好的隐形音响? 网上了解到一款黑科技产品*音响,但是品牌比较多,赫斯*音响,阿米纳,安美莱跟所能士哪个品牌好?