【问题标题】:Use ObjectOutputStream and FileOutputStream with FileWriter将 ObjectOutputStream 和 FileOutputStream 与 FileWriter 一起使用
【发布时间】:2011-01-17 13:48:36
【问题描述】:

有没有办法像这样使用ObjectOutputStream

<tag>output of the ObjectOutputStream</tag>

如果我尝试:

FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileWriter fw = new FileWriter(fos);

例如:

fw.write("<tag>");
oos.write(cool_object);
fw.wrote("</tag>");

我没有得到那个结果。似乎ObjectOutputStream 每次都会完全覆盖文件。

【问题讨论】:

    标签: java objectoutputstream


    【解决方案1】:

    否 - FileWriter 用于编写 文本,但 ObjectOutputStream 的输出本质上是 二进制 数据。如果要将对象序列化为 XML,请使用 了解 XML 的序列化程序,例如XStream.

    【讨论】:

      【解决方案2】:

      尝试以下二进制输出。

      oos.writeObject("<tag>");
      oos.writeObject(cool_object);
      oos.writeObject("</tag>");
      

      OR 文本输出

      fw.write("<tag>"+cool_object+"</tag>");
      

      编辑:如果cool_object.toString() 的输出包含HTML 特殊字符,您可能需要对其进行编码。

      【讨论】:

      • 如果您的cool_object 包含类似'' 的字符串或其他XML 实体,可能会出现一些问题。正如@Bozho 提到的那样,如果您使用 XML 框架或将二进制文件转换为 Base64 字符串可能会更好。
      • 我们应该假设您的意思是 oos.writeObject(..) 吗?这将输出 3 个对象 - 2 个字符串和 1 个自定义对象。但是序列化后的字符串对象表示不太可能是&lt;tag&gt;
      • @Bozho,你是对的。二进制文件将包含 &lt;tag&gt;&lt;/tag&gt; 以及许多您无法以文本形式读取的二进制文件。
      • XML 不是解决方案。我不喜欢替换我的问题;) Java 似乎与大多数尝试将对象持久保存到文件或存储/读取低级字节表示的磁盘一样。我仍然不确定如何再次阅读cool_object,但我会找到办法的。
      • @wishi,有很多不同的方法可以将对象存储在文件中。您需要更具体地了解您的要求。 Java 中至少内置了两种标准方法,并且有几十个库可以以不同的方式进行操作。
      【解决方案3】:

      ObjectOutputStream 进行二进制表示。因此,您必须首先将其转换为字符串表示形式 - 十六进制或 Base64

      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      ObjectOutputStream oos = new ObjectOutputStream(baos);
      String str = Base64.encodeBase64(baos.toByteArray());
      

      然后在标签之间写下str

      如果你想要一个 xml 表示,而不是二进制表示,那么你可以使用 XMLEncoder,它是 ObjectOutputStream 的 xml 版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-06
        • 2019-02-18
        • 2015-11-20
        • 2013-07-27
        相关资源
        最近更新 更多