paw*_*que 19 java serialization serialversionuid
有没有办法确定serialVersionUID序列化Java对象的生成?
问题是我序列化了一个对象而没有明确指定serialVersionUID.现在反序列化过程抱怨类不兼容.但是我并没有以一种使它不兼容的方式改变这个类.所以我假设serialVersionUID在类中指定它就足够了,因为它存储在对象数据中.为了做到这一点,我需要serialVersionUID从序列化数据中读取.
Kes*_*hav 22
有一种简单的方法可以找到一个类的serialversionUID-
假设你有一个你忘记提及serialversionUID的课程 -
import java.io.Serializable;
public class TestSerializable implements Serializable {
}
Run Code Online (Sandbox Code Playgroud)
这样做 -
serialver -classpath . TestSerializable
Run Code Online (Sandbox Code Playgroud)
这印刷品 -
static final long serialVersionUID = 5832063776451490808L;
Run Code Online (Sandbox Code Playgroud)
serialver是一个与JDK一起提供的实用程序
Mar*_*ins 20
这对我有用:
long serialVersionUID = ObjectStreamClass.lookup(YourObject.getClass()).getSerialVersionUID();
Run Code Online (Sandbox Code Playgroud)
希望它也能帮到你.
McD*_*ell 12
您可以通过扩展ObjectInputStream来完成此操作:
public class PrintUIDs extends ObjectInputStream {
public PrintUIDs(InputStream in) throws IOException {
super(in);
}
@Override
protected ObjectStreamClass readClassDescriptor() throws IOException,
ClassNotFoundException {
ObjectStreamClass descriptor = super.readClassDescriptor();
System.out.println("name=" + descriptor.getName());
System.out.println("serialVersionUID=" + descriptor.getSerialVersionUID());
return descriptor;
}
public static void main(String[] args) throws IOException,
ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
List<Object> list = Arrays.asList((Object) new Date(), UUID.randomUUID());
oos.writeObject(list);
oos.close();
InputStream in = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new PrintUIDs(in);
ois.readObject();
}
}
Run Code Online (Sandbox Code Playgroud)
我相信通过替换方法返回的描述符可以读取所有序列化数据,但我还没有尝试过.
小智 5
存在与序列化位相关联的元数据(如果您愿意,可以使用标题).如果您知道它在哪个位置(SerialVersionUID与其他信息(如类名)一起写入),您可以从元数据中读取值.
我认为这篇文章可能对您有所帮助:Java序列化算法揭示了.
请注意,这些位是"明确地"写入的(除非您明确地对流进行了加密),因此您可能需要使用HEX编辑器才能看到它是什么SerialVersionUID.
| 归档时间: |
|
| 查看次数: |
16573 次 |
| 最近记录: |