java - 内部类的IO

标签 java io objectinputstream eofexception

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

  1. 我使用同一个文件对象打开两个流,所以这不是问题所在。
  2. 它似乎独立于内部类的性质 - 仅具有 public int 的类与更复杂的类一样会失败。

我必须继续前进,创建一个常规类,并在发件人类中实例化,但我不想走开,不知道是否可行,如果不可能,为什么不。

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

一个。您不能重新打开使用 ObjectOutputStream 编写的文件并附加:第二个 header 已写入并损坏了文件。

B.使用 ByteOutputStream 序列化一个 HashMap 来做一个哈希摘要是行不通的,因为当你从 ObjectOutputStream 文件中读回 HashMap 时,你很可能从 ByteOutputStream 得到一个不同的 byte[],因为对顺序的变化:内容是相同,但 byte[](以及哈希摘要)不是。

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

最佳答案

这个对我有用。请查找与您的解决方案有何不同之处。

public class Example implements Serializable {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        new Example().run();
    }

    private void run() throws IOException, ClassNotFoundException {
        Inner inner = new Inner();
        inner.x = 5;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream outputStream = new ObjectOutputStream( out );
        outputStream.writeObject( inner );

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

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

    class Inner implements Serializable {
        int x;
    }
}

关于java - 内部类的IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609556/

相关文章:

java - 从 SignedObject 获取时出现 InvalidObjectException

java - 为什么我使用 ObjectInputStream 一次只能读取 1024 个字节?

java - ArrayList 的输入

java - 如何在 Java 中将 InputStream 读取/转换为字符串?

java - 如何将 CR 和 LF 附加到 String.getBytes() 返回的数组

java - 没有打印两次?

java - 无法在 Android 平台上为蓝牙套接字使用 InputStream 创建 ObjectInputStream

java.lang.ClassNotFoundException : com. facebook.unity.FB 每当我测试我的构建时

java - 在Java中使用两个线程顺序打印ArrayList

java - AndroidJavaProxy 不是一个接口(interface)