我的Java程序中有一个消息传递类,该消息传递类仅使用String值,而不使用任何binary数据。

我想发送一个rpm文件,因此基本上是通过此消息传递类将binary数据发送到receiver

我知道可以通过将binary数据转换为String端的messaging,然后再转换为binary端的receiving文件来完成。

但是我的问题是,在将我的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

07-24 18:41
查看更多