反序列化二进制类文件的内容时发生ClassNotFoundException
||
我对Java不太了解。我正在尝试读取一个文件,该文件包含一个int以及一个名为\“ Automobile \”的类的各种实例。但是,当我对其进行反序列化时,该程序将引发ClassNotFoundException,而且我似乎无法理解为什么。
这是代码:
try {
FileInputStream fin = new FileInputStream(inputFile);
ObjectInputStream input = new ObjectInputStream(fin);
conto = input.readInt();
Automobile[] macchine = new Automobile[conto];
for(int i = 0; i < conto; i++) {
macchine[i] = (Automobile)input.readObject();
}
String targa;
System.out.print(\"\\nInserire le cifre di una targa per rintracciare l\'automobile: \");
targa = sc1.nextLine();
for(int i = 0; i < conto; i++) {
if(macchine[i].getTarga().equals(targa))
System.out.println(macchine[i]);
}
} catch(IOException e) {
System.out.println(\"Errore nella lettura del file \"+inputFile);
} catch(java.lang.ClassNotFoundException e) {
System.out.println(\"Class not found\");
}
提前致谢。
编辑:这是stacktrace
java.lang.ClassNotFoundException: es4.Automobile
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at es4p2.Main.main(Main.java:35)
没有找到相关结果
已邀请:
7 个回复
杰黔轿缺
将丢失。 问题可能是由我提出的汽车引发的自定义异常引起的吗? 我能想到的唯一其他可能性是:
直接或间接依赖于缺少的某些其他类
或相关类的静态初始化引发了一个异常,该异常尚未在该类的内部捕获。 但是这两个(我认为)应该导致了不同的堆栈跟踪。 我只是注意到软件包名称是es4p2,而不是es4。为什么说es4?可能是因为保存文件的程序使用了另一个软件包名称吗? 我不知道为什么他们与众不同。您需要与编写代码/产生序列化对象的人交谈。但是,这很可能是造成问题的原因。具有不同程序包名称的类是不同的类。期。 当捕获到意外异常时,您应该始终输出(或记录日志)堆栈跟踪。这将告诉您(和我们)更多出了问题的信息,在这种情况下,这是缺少的类的名称。
抵舵
茬贺努充尽
柑恫祟
班是否有这样的字段?
如果不是,请定义一个。让我们知道是否可以解决问题。
疾很毋悲
稍惮
但是是AppClassLoader,您无法使用Java 9对其进行自定义。因此,我将自己的ObjectInputStream设置为原始输入的子类型,并覆盖了resolveClass方法:
辰炔诚薯