文档章节

java类实现Serializable的作用

大海
 大海
发布于 2016/09/17 00:09
字数 301
阅读 152
收藏 0

在开发过程中,经常会看到有类实现了java.io.Serializable接口,并生成随机的serialVersionUID,这个接口到底有什么作用,不实现该接口会有什么问题。

先看看第二个问题,我们准备用api把对象存入redis缓存里,代码为:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import redis.clients.jedis.Jedis;

public class RedisTest {
	public static void main(String[] args) throws IOException {
		Jedis jedis = new Jedis("localhost", 6379	, 10);
		car car = new car();
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		ObjectOutputStream outputStream = new ObjectOutputStream(arrayOutputStream);
		outputStream.writeObject(car);
		jedis.set("car".getBytes(),arrayOutputStream.toByteArray());
		jedis.close();
	}
}
class car{
	
}

1.用redis-server.exe redis.windows.conf命令启动redis服务端

2.自定义了一个类car类,创建对象

3.用java代码创建redis客户端并将car对象用io流处理为byte数组,至于为什么要先处理成数组,是因为redis会把存入的对象持久化到硬盘上,而car这个对象当时还在内存中,所以需要用io流传输,传输过程对象的以二进制类型存在。

4.执行代码,发现异常

Exception in thread "main" java.io.NotSerializableException: redis.car
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at redis.RedisTest.main(RedisTest.java:16)

提示为没有序列化异常,现在在回头看这个接口的定义

© 著作权归作者所有

大海
粉丝 2
博文 84
码字总数 32431
作品 0
杭州
程序员
私信 提问
serialVersionUID作用

Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较...

stefanzhlg
2015/03/23
542
0
JAVA序列号的serialVersionUID

serialVersionUID 的规范 Serializable 和 Externalizable Java类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法进行序列化或反序列化。可序列化类的所有子...

细节探索者
10/02
52
0
什么是 java 序列化?什么情况下需要序列化?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/meism5/article/details/90413987 序列化:将 Java 对象转换成字节流...

ConstXiong
06/17
0
0
java基础专栏—Properties

Properties 一个持久的属性集。Properties可以保存在流中或从流中加载,Map中每个键和值都对应字符串 HashTable的子类,Map集合的方法都可以使用,线程安全 该集合没有泛型,且不能写泛型 它...

T-newcomer
2017/10/21
47
0
Serializable & Parcelable

对象序列化的简单介绍 所谓对象的序列化其实就是把JVM运行过程中生成的对象通过特殊的处理手段转换为字节形式的文件。转换之后就可以将其永久保存到磁盘中,或者以字节流进行网络传输。 在A...

吴七禁
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

thinkphp5.1学习过程四——trait

<?php /** *trait实现了代码的复用 *并且突破了单继承的限制 *trait是类不是类,不能实例化 */ trait Demo1 { public function hello1() { return __METHOD__; } } trait Demo2 { public fu......

大海yht
27分钟前
6
0
DB2 sequence 操作

操作DB2 下 sequence seqName db2数据库一般seq还是比较大的,但是程序在调用的时候还是不可避免的有一些bug, 下面是对于seq一些简单的操作,也作为工作的一些记录 1、命令行取sequence se...

飞雪无痕
34分钟前
6
0
《吊打面试官》系列-秒杀系统设计

你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 絮叨 之前写了很多Redis相关的知识...

敖丙
40分钟前
12
0
Qt编写气体安全管理系统11-数据打印

一、前言 在各种软件系统中,数据打印也是常用的功能之一,一般来说会对查询的数据结果导出到excel,还会对查询的数据结果直接打印,在Qt中提供了打印机类QPrinter,在printsupport组件中,可...

飞扬青云
46分钟前
5
0
初级阶段

#include <stdio.h> #include <stdlib.h> int main(){ int a; int Sn = 0; int i; int tmp = 0; scanf_s("%d", &a); for (i = 1; i <= 5; i++) { tmp = tmp * 10 + a; Sn += tmp; } printf("......

Lxxxxx256
47分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部