在开发过程中,经常会看到有类实现了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)
提示为没有序列化异常,现在在回头看这个接口的定义