我的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
。