【发布时间】:2020-10-31 17:37:04
【问题描述】:
我在 .dat 文件中有 3 个 Fraction 类型的对象,我正在尝试使用 Java 读取 .dat 文件的内容。
通过下面的代码块,我不断得到:
线程 "main" java.lang.ClassCastException 中的异常:类 Fraction 不能转换为类 [LFraction; (Fraction 和 [LFraction; 位于加载程序“app”的未命名模块中)
在 Mod8Problem1.main(Mod8Problem1.java:26)
我尝试了一些方法,但总是遇到同样的异常。解决此问题的最佳方法是什么?
try(
ObjectInputStream input = new ObjectInputStream(new FileInputStream("SerialF.dat"))
) {
Fraction[] updatedFractions = (Fraction[]) (input.readObject());
for (int i = 0; i < updatedFractions.length; i++) {
System.out.println(updatedFractions[i]);
}
}
【问题讨论】:
-
您正在尝试反序列化
Fraction,但您用来引用它的变量是Fraction[]。您需要单独循环读取每个Fraction对象;readObject()正在返回Fraction,而不是Fraction[]。 -
@Dioxin 你能帮我理解为什么这段代码有效吗:try (ObjectInputStream input = new ObjectInputStream(new FileInputStream("array.dat")); ) int[] numbers = (int []) (input.readObject());
-
因为
array.dat被序列化为数组。数组是对象,可以序列化。但是,SerialF不是序列化数组。将多个对象写入同一个文件与序列化数组不同。听起来像SerialF将多个对象序列化到同一个文件,而array只是序列化一个数组(一个对象)。 -
您在问题中写道:我在 .dat 中有 3 个 Fraction 类型的对象 不,您没有。您只能在 java 中序列化单个对象,但是该单个对象可能是
Collection或数组,换句话说,单个对象包含多个其他对象。 SerialF.dat 文件是如何创建的?
标签: java serializable