【问题标题】:Reading in serialised objects from ObjectInputStream从 ObjectInputStream 读入序列化对象
【发布时间】:2013-11-25 22:08:33
【问题描述】:

第一次尝试从文件中读取对象,我将如何读取我编写的文件?

    private static final long serialVersionUID = -4654676943759320425L;
private ArrayList<ArrayList<Object>> world;
private ArrayList<AFood> foods;
private ArrayList<ABlock> blocks;
private ArrayList<ABug> bugs;
private String name = null;
private int lengthX = 0, lengthY = 0;

这是对象类(只是变量)

open = new FileInputStream(worldSavedAs);
openBuffer = new BufferedInputStream(open);
openIn = new ObjectInputStream(openBuffer);
this.world = openIn.readObject();

这就是我当前尝试读取对象的方式

save = new FileOutputStream(worldNameAs + ".aBugsWorld");
saveBuffer = new BufferedOutputStream(save);
saveOut = new ObjectOutputStream(saveBuffer);
saveOut.writeObject(this.worldSave); // Here was the problem

这就是我写文件的方式

显然这是不正确的,我不知道如何读取对象,是否必须一个一个地插入变量或作为一个我不知道的整个类。

编辑:我正在将流写入文件而不是导致问题的对象(因为文件 IO 流无法转换为 AWorld)

【问题讨论】:

  • 我正在将文件 IO 对象写入文件而不是我的世界!傻我,有时这是最小的事情。虽然现在当我试图拯救世界时,它试图写入的所有变量都会出现异常,说'at java.io.ObjectOutputStream.writeObject0(Unknown Source)'
  • ...我必须对世界上使用的所有其他类进行序列化。

标签: java object io serializable


【解决方案1】:

看起来是正确的。 但有人认为,要写入文件的类必须是可序列化的。

你也可以这样做:

1.> 类要写入文件:

 class StudentRecord implements Serializable{
        String name;
        public StudentRecord(String name) {
            this.name=name;
        }  
    }

2.> 写入文件

            File f=new File("xyz.txt");
            f.createNewFile();
            fo = new FileOutputStream(f);
            ObjectOutput oo=new ObjectOutputStream(fo);
            StudentRecord w=new StudentRecord("MyName");
            oo.writeObject(w);

3.> 从文件中读取

        File f=new File("xyz.txt");
        fi = new FileInputStream(f);
        ObjectInputStream oi=new ObjectInputStream(fi);
        StudentRecord sr=(StudentRecord)oi.readObject();

【讨论】:

  • 谢谢。我正在将文件 IO 写入流而不是我的对象!
【解决方案2】:

看起来不错。只需确保您编写/只读可序列化的对象,这在您的示例中并不清楚。另外我会让流结构更简单

ObjectOutputStream out = new ObjectOutputStream(
    new BufferedOutputStream(new FileOutputStrea(file))
);

您不需要保存对中间流的引用。

【讨论】:

  • 有一个问题,我可能应该包括在内。线程“main”java.lang.Error 中的异常:未解决的编译问题:类型不匹配:无法从 Object 转换为 AWorld 我之前也没有使用过可序列化,也不知道你在说什么。介意解释一下吗?
  • 我试过了,当它运行时它说它不能将对象投射到 AWorld。
  • 正如我所说,我正在将文件 IO 流写入导致问题的文件。有时,最愚蠢的问题会让你困惑好几天。 N.B/ 谢谢,我确实意识到您不必参考中间流:这只是为了让我了解它是如何工作的(否则我会更加困惑!)
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2016-01-25
  • 2013-11-09
  • 1970-01-01
相关资源
最近更新 更多