我的java程序中有一个消息类,它只使用String
个值而不使用任何binary
数据。
我想发送一个rpm
文件,基本上binary
数据通过此消息传递类发送到receiver
。
我知道这可以通过将binary
数据转换为String
端的messaging
,然后转换回binary
上的receiving
文件来完成}结束。
但是我的问题是,在将我的binary
文件转换为String
然后又转回binary data
以保存为binary
文件之前,是否会丢失任何数据,或者通过所有转换保留数据?
答案 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
。