【问题标题】:How to write class object to bin file如何将类对象写入bin文件
【发布时间】:2011-09-25 16:05:55
【问题描述】:


我正在使用 java 来映射一些巨大的图形。我有一个具有此映射的个性化类对象,它由几个 hasmap 组成,并调用其他也由 varios 对象组成的个性化类。

我的问题是,每次我运行它来进行测试时,大约需要 5 分钟来映射所有内容,然后对于每个节点,可能需要 1 到 10 分钟来进行一些计算。每次我必须修复代码上的某些问题时,我都必须经历这段等待时间。
所以我的问题

有什么方法可以将主要对象类(由几个原始对象和非原始对象组成)存储为二进制文件,我可以保存一次并从那时起读取?

解析将如何进行?

我已经开始研究 FileOutputStream/ObjectOutputStream 和 FileInputStream/ObjectInputStream,但我不确定我是否正确理解它们是否适合这种情况。

任何 cmets 和建议将不胜感激。

更新:我附上了我试图用来保存类对象的代码。

FileOutputStream fos = new FileOutputStream("tbox.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(tboxObject);
oos.flush();
oos.close();

这是第一次运行,之后我将代码交换为:

FileInputStream fis = new FileInputStream("tbox.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
tboxObject savedTboxObject = (tboxObject) ois.readObject();

我要补充的是,这些对象不仅由整数和字符串组成,还由哈希图、列表和其他复杂对象的数组组成。

【问题讨论】:

  • 嗯,代码看起来不错。很难说可能是什么问题。您是否在 catch 块中吞下了任何异常?

标签: java file-io inputstream outputstream serializable


【解决方案1】:

来自java docs

    FileOutputStream fos = new FileOutputStream("t.tmp");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(yourObject);
    oos.close();

只要确保图中的所有对象都实现可序列化。

【讨论】:

  • 嗨,我试过这种方式。我在“MyObject”类中存在的所有对象中实现了可序列化,然后我尝试读取它。 FileInputStream fis = new FileInputStream("myFile.dat"); ObjectInputStream ois = new ObjectInputStream(fis); MyObject mo = (MyObject) ois.readObject(); 这会导致 EOF 异常。附带说明一下,保存的文件大小为 1kb,我预计至少 4 或 5 mb。这是很多信息。
  • 你的对象图一定有问题,没有一些代码很难判断。
【解决方案2】:

Serialize 可能是你想要的。在您的类中实现可串行化接口,然后使用 ObjectOutputStream 将对象写入文件。

【讨论】:

    【解决方案3】:

    是的,您可以使用 OutputStream/InputStream 类序列化和保存对象。但是,当您修改类(例如添加/删除/修改实例变量)然后尝试读取之前保存的文件时,请务必小心。

    【讨论】:

    • 嗨,aldrin,该文件只会在第一次运行时读取。之后每次修改我都应该保存,这样程序就会停止并再次启动它具有更新的版本
    • 在这种情况下,将其保存在文件中就足够了。发布您的代码,以防您无法正常工作。
    • @joel_gil:您的代码看起来不错。你有什么问题吗?
    • @paulo:问题是在第一次运行后我得到的文件是 1kb 大小,而我不希望在兆字节范围内有任何东西。因此,当我尝试阅读它时,我得到一个 EOF 异常 =S
    • @joel_gil:你有 try..catch 你忽略异常的代码吗?你能打印出任何捕获的异常吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多