java-序列化的Class数据到底是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-序列化的Class数据到底是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2316字,纯文字阅读大概需要4分钟。
内容图文
我一直想知道您是否在这样的对象中序列化类数据:
public Something implements Serializable{
private static final long serialVersionUID = 1L;
public Class type;
}
实际将哪些数据序列化并保存为类型?
即使您当时未加载该类,是否也可以从类型中获取诸如simplename和fullname之类的信息?
解决方法:
Is it possible to get info like simplename and fullname from type even if you don’t have that class loaded at the time?
只要存在该类型的类,就会加载Class对象所引用的类.
使用下面的代码:
class Test implements Serializable {
// verion UID
public Class type;
public Test(Class type) {
this.type = type;
}
}
我序列化了一个包含不同类型的Class的Test对象:
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("text.obj"));
out.writeObject(new Test(Second.class));
out.close();
现在,将其读回:
ObjectInputStream in = new ObjectInputStream(new FileInputStream("text.obj"));
Test test = (Test) in.readObject();
in.close();
在此代码中没有引用第二类.如果在运行上述程序时加载了Second,则可以认为它是由于反序列化而不是直接引用引起的.
它确实:
所以是的,尝试获取诸如type.getSimpleName()之类的东西将起作用.
运行:
ObjectInputStream in = new ObjectInputStream(new FileInputStream("text.obj"));
Test test = (Test) in.readObject();
System.out.println(test.type.getSimpleName());
in.close();
版画
Second
删除第二个类时,将按预期方式获得ClassNotFoundException.通过阅读stacktrace,您可以看到程序尝试加载Second类:
Exception in thread "main" java.lang.ClassNotFoundException: test.Second
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readClass(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
内容总结
以上是互联网集市为您收集整理的java-序列化的Class数据到底是什么?全部内容,希望文章能够帮你解决java-序列化的Class数据到底是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。