【问题标题】:Getting unreadable characters when using ObjectOutputStream to write my object to a text file使用 ObjectOutputStream 将我的对象写入文本文件时出现不可读的字符
【发布时间】:2019-12-05 21:51:28
【问题描述】:

我现在的问题是: 在我的文本文件中,当我尝试使用 ObjectOutputStream 将我的对象写入我的 case.txt 文件时,我得到了一些看起来很时髦的字符。

    FileOutputStream file = new FileOutputStream("/cases.txt");
    ObjectOutputStream data = new ObjectOutputStream(file);

    DefectProduct s1 = new DefectProduct("test", 5, "test", "test",
            "test", 50, 2019, 1, 24, "505", "test" );
    data.writeObject(s1);

    data.flush();
    data.close();
    System.out.println("Record added");

现在我正在尝试将我的对象写入文本文件的部分工作。我在某处读到 ObjectOutputStream 是将对象写入文本文件的选择。这个对吗?

最后,我的目标是获取一个完整的对象数组列表并将整个数组列表写入我的文本文件。

【问题讨论】:

  • 阅读ObjectOutputStream 的文档中的第二句,您会发现它不是用文本编辑器阅读的。
  • 另外,请参阅this 问题以尝试解决您的问题。
  • @FedericoklezCulloca 我没有在那个例子中看到他们使用文本文件。
  • 有一个指向this guide 的链接解释了序列化的工作原理以及如何对其进行自定义。也就是说,您可以继续使用ObjectOutputStream,但您必须实现您自定义的writeObject 方法。
  • 也许this other answer对此更清楚一点。

标签: java


【解决方案1】:

ObjectOutputStream 产生人类可读的流(即您无法在文本编辑器中打开它并期望阅读内容)。文本编辑器试图将文件中的所有内容显示为文本,但文件本身不包含有效文本,这就是文本编辑器显示不可读字符的原因。

ObjectOutputStream 的目的是生成稍后可以使用ObjectInputStream 读回的数据,但没有人说这些数据将是有效的文本数据。

您的输出文件是cases.txt 并不重要。文件的扩展名只是名称的一部分,也是对用户或操作系统的提示,可能是该文件中的内容,但这并不意味着该文件中实际保存的内容。您可以将输出文件命名为cases.mp3,但这不会生成音乐文件。

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多