Java 精确缓冲区映像序列化\反序列化
我使用以下代码来序列化和反序列化我的对象,该对象包含Java 精确缓冲区映像序列化\反序列化,java,serialization,Java,Serialization,我使用以下代码来序列化和反序列化我的对象,该对象包含buffereImage字段 private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); if (bufferedImageField != null) { out.writeBoolean(true); ImageIO.write(bufferedImageFiel
buffereImage
字段
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
if (bufferedImageField != null) {
out.writeBoolean(true);
ImageIO.write(bufferedImageField, "png", out);
}
else
out.writeBoolean(false);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
if (in.readBoolean())
bufferedImageField= ImageIO.read(in);
else
bufferedImageField = null;
}
但问题是图像正在被压缩和解压缩,因此对象的hashCode()
在反序列化后会发生变化。此外,压缩和解压缩也需要很多时间
如何在不压缩的情况下序列化图像并精确地反序列化它?
buffereImage
从对象继承hashCode
。因此,hashCode
上的值与图像的内容没有任何关系。你在这里找错了方向……无论如何,除非你使用buffereImage
作为HashMap
中的一个键(你为什么要这样做?!)你到底为什么在意?@AndrewR这意味着,HashCode在序列化之前和之后都不会是一样的。因为它是一个不同的对象。@AndrewR那么hashCode
绝对是最糟糕的主意hashCode
必须为同一对象返回相同的值,但可能为不同对象返回相同的值public int hashCode(){return 1;}
是有效的hashCode
实现。使用图像数据的MD5散列。“1/4300000000的概率对于我来说已经足够小了。”-好的,但事实上你不能将它与序列化一起使用,这使得整个讨论毫无意义。