是否可以将 ObjectOutputStream/ObjectInputStream 设为内部类?我可以编写它并检查创建的文件,但是当我尝试使用 ObjectInputStream 读回它时,我得到一个 EOFException 只是试图读取一个 Object o = oos.readObject();
- 我使用同一个文件对象打开两个流,所以这不是问题所在。
- 它似乎独立于内部类的性质 - 仅具有 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/