为什么ObjectOutputStream将符号写入文件而不是我的输入?

时间:2016-11-26 00:50:19

标签: java objectoutputstream

我正在尝试将名为ArrayList的{​​{1}}写入文件。它可以工作,但不幸的是它只是将符号写入文件而不是我的实际输入。

以下是我的代码:

Clients

如何让它发挥作用?

2 个答案:

答案 0 :(得分:2)

您所做的是将Java对象序列化到具有ObjectOutputStream的文件。这意味着,Java会将您的对象Clients转换为特定的表示形式,该表示形式涵盖您的对象具有的所有状态,例如成员变量。这种表示不是人类可读的,它是一种二进制格式,它比文本格式更有效,更适合于类和Java环境。查看here了解更多信息。

您可以使用FileWriterBufferedWriterPrintWriter来使用多种write[...](...)方法将文本写入文件。在这种情况下,您必须将每个变量编写为String等,而不是整个类。 Here你可以找到一个例子。

对于整个对象执行与ObjectOutputStream相同的另一个选项,但是以完全可自定义的方式和人类可读的形式使用Java Architecture for XML Binding (JAXB),但这需要一些阅读。还有其他用于JSON和其他格式的对象序列化库。

答案 1 :(得分:1)

  

为什么当我运行这个java程序时它会创建文本文件,但它会输出符号而不是我的输入?

因为它不是文本文件。它是根据Java序列化协议编写的序列化数据,因为您使用的是ObjectOutputStream.writeObject()

这也意味着CustomerLists.txt不适合此文件。

如果您需要文字,请使用PrintWriterBufferedWriter