【问题标题】:File not readable after converting to byte array and back转换为字节数组并返回后文件不可读
【发布时间】:2026-02-21 00:25:02
【问题描述】:

我有一个 .tar.gz 文件,我需要将其放入字节数组中,以便将其放入 IBM JMS 队列中。问题是转换为字节数组后,当我转换回文件时,我的文件不再可读。这是将文件读入 JMS 消息然后将字节写入文件的两行代码。

Files.readAllBytes(Paths.get(file.getPath()))

Files.write(filename, message.getBytes(), StandardOpenOption.CREATE);

还有什么我需要做的吗,也许是与使这项工作相关的格式?从队列中消耗消息的程序给了我这个错误(在打印出二进制文件之后)

is not a valid base64Binary.  A valid example is "AA==".

【问题讨论】:

  • 这里可能没有足够的详细信息来回答,但错误消息“不是有效的 base64Binary”表明可能打印该消息的任何内容都应该是 base 64 编码的二进制文件。 Base 64 是一种以常规 ASCII 字符编码二进制数据的方式

标签: java arrays jms


【解决方案1】:

试试这个:

byte[] buf = Files.readAllBytes(Paths.get(file.getPath()));
buf = java.util.Base64.getEncoder().encode(buf);

这将对字节进行 base64 编码,可能更适合您。

【讨论】:

  • 不要使用 sun.misc.* 类。它们可以在 Java 的任何未来版本中删除,并且从 Java 9 开始,它们将不能被模块感知 Java 应用程序使用。请改用java.util.Base64