如果我将二进制数据转换为字符串并返回,Java 中是否有任何数据丢失?

Is there any data lost in Java if I convert Binary data to a String and back?

我的 java 程序中有一条消息 class,它只使用 String 值,从不使用任何 binary 数据。

我想发送一个 rpm 文件,所以基本上 binary 数据通过此消息 class 发送到 receiver

我知道这可以通过在 messaging 端将 binary 数据转换为 String,然后在 [=] 端转换回 binary 文件来完成20=]结束。

但是我的问题是,在将我的 binary 文件转换为 String 然后返回 binary data 以另存为 binary 文件期间,是否会丢失任何数据,还是会在所有转换过程中保留数据?

二进制数据表示byte[], InputStream, OutputStream。 java 在内部使用 Unicode 文本:String, char, Reader, Writer.

因此应该只转换表示文本的二进制数据,并指定该二进制数据的编码:

byte[] bytes = ...
String s = new String(bytes, StandardCharsets.UTF_8);
bytes = s.getBytes(StandardCharsets.UTF_8);

不应转换非文本数据,因为它可能对特定编码是非法的,尤其是对于多字节编码UTF-8。 此外,转换为 Unicode 是一种不必要的低效率。例如 java char 是两个字节(UTF-16 编码)。

出于某些目的最好使用 ByteArrayInputStream, ByteArrayOutputStream, ByteBuffer。从不字符串。固执的时候,就用StandardCharsets.ISO_8859_1.