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

时间:2016-05-18 14:32:23

标签: java type-conversion binaryfiles binary-data raw-data

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

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

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

但是我的问题是,在将我的binary文件转换为String然后又转回binary data以保存为binary文件之前,是否会丢失任何数据,或者通过所有转换保留数据?

1 个答案:

答案 0 :(得分:1)

二进制数据表示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