1

是否可以将 ObjectOutputStream/ObjectInputStream 设置为内部类?我可以写好,并检查创建的文件,但是当我尝试使用 ObjectInputStream 读回它时,我得到一个 EOFException 只是试图读取一个 Object o = oos.readObject();

  1. 我使用相同的 File 对象来打开两个流,所以这不是问题。
  2. 它似乎与内部类的性质无关——只有一个公共 int 的类与更复杂的类一样失败。

我必须继续前进,创建一个常规类,并在发送者类中实例化,但我讨厌走开,不知道是否可能,如果不知道为什么不这样做。

更新:导致问题的相关问题:

A. 您无法重新打开使用 ObjectOutputStream 写入的文件并追加:写入第二个标头并损坏文件。

B. 使用 ByteOutputStream 序列化 HashMap 以进行哈希摘要不起作用,因为当您从 ObjectOutputStream 文件中读回 HashMap 时,由于对顺序的变化,您很可能会从 ByteOutputStream 获得不同的 byte[]:内容是相同的,但 byte[] (以及散列摘要)不是。

希望这可以帮助某人节省一些时间。

4

2 回答 2

2

您可以包含一些示例代码吗?最明显的解释是,在尝试重新读取输出流之前,您没有关闭/刷新输出流。

于 2009-10-22T20:05:32.827 回答
2

这个对我有用。请寻找与您的解决方案的任何差异。

公共类示例实现可序列化{
    public static void main(String[] args) 抛出 IOException,ClassNotFoundException {
        新的示例()。运行();
    }

    private void run() 抛出 IOException,ClassNotFoundException {
        内内 = new Inner();
        内部.x = 5;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream outputStream = new ObjectOutputStream(out);
        outputStream.writeObject( 内部 );

        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
        ObjectInputStream inputStream = new ObjectInputStream( in );
        内部 inner2 = (Inner) inputStream.readObject();

        System.out.println(inner2.x);
    }

    类内部实现可序列化{
        诠释 x;
    }
}

于 2009-10-22T20:30:47.123 回答