【问题标题】:Outputting byte[] to a .txt file将 byte[] 输出到 .txt 文件
【发布时间】:2013-03-07 14:41:34
【问题描述】:

我正在尝试将字节数组输出到文件。当我调用 System.out.println(ouput_stream) 时,我创建的字符串正确显示。悬停,当我使用 FileOutputStream 时它无法正确输出。这是我到目前为止所得到的。有什么建议吗?

FileOutputStream fos = new FileOutputStream("outputFile.txt"); 
OutputStreamWriter out = new OutputStreamWriter(fos, "UTF-8");

String received_string = new String(rPacket.getData(), 0, rPacket.getLength(), "UTF-8");

System.out.println(received_string);
out.write(received_string, 0, received_string.length());

当我调用 System.out.println(received_string 时,控制台会显示信息信息。但是,它没有正确输出文件。我之前问过类似的问题,但现在正在努力输出。谢谢任何帮助。

【问题讨论】:

  • 字节不是文本。你想展示什么?
  • 你想输出一个字节[]还是一个字符串?
  • 你说“它没有正确输出文件”。关闭 writer 后文件包含什么内容?
  • 那里有看起来像亚洲人的角色。而 System.out.println 输出 ASCII 英文字符。
  • 字节文件是从一个类似的文件创建的,并通过网络传输。我得到的结果是一个字节数组,我认为我对此无能为力。

标签: java java-io


【解决方案1】:

根本不要使用 String 或 Writer。只需将数据包中的字节直接复制到文件中即可:

fos.write(rPacket.getData(), rPacket.getOffset(), rPacket.getLength());

那么你不可能破坏数据。

【讨论】:

    【解决方案2】:

    看看 Apache Commons FileUtils.writeByteArrayToFile

    应该做你需要的

    【讨论】:

      【解决方案3】:

      尝试使用 BufferedWriter ..

      BufferedWriter writer = new BufferedWriter(new FileWriter("outfile"));
      writer.write(received_string);
      

      【讨论】:

      • 使用 FileWriter 只会让情况变得更糟,因为它使用平台默认编码,而 OP 希望使用 UTF-8。
      【解决方案4】:

      你的代码看起来有点奇怪(你想要字节还是字符串),但应该没问题。

      您在文件中发现了什么?您在查看之前关闭了流/写入器吗?如果没有,它可能仍在某处缓冲。

      但是,如果您真的只想将该数据包通过管道传输到文件,请尽量避免转换为字符串。

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多