如果我将二进制数据转换为字符串并返回,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
.
我的 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
.