您正在调用的构造函数使得二进制到字符串的转换使用解码:变得很明显
String(byte[] bytes, Charsetcharset)。您想要的是根本不使用解码。
幸运的是,有一个构造函数:
String(char[] value)。
现在,您将数据存储在一个字符串中,但是您希望完全照原样返回它。但猜猜怎么了!
getBytes(Charset charset)
没错,还会自动应用一种编码。幸运的是,有一种
toCharArray()方法。
如果必须以字节开头并以字节结尾,则必须将char数组映射到字节:
(new String(Array[Byte](1,2,3,-1,-2,-127).map(_.toChar))).toCharArray.map(_.toByte)
因此,总结一下:在之间转换
String并
Array[Byte]涉及编码和解码。如果要将二进制数据放入字符串中,则必须在字符级别进行。但是请注意,这将为您提供一个垃圾字符串(即结果不会像
String预期的那样形成格式正确的UTF-16
),因此,您最好将其读取为字符并将其转换回字节。
您 可以
通过增加512来向上移动字节;那么您将获得一堆有效的单个
Char代码点。但这使用16位来表示每8位,即50%的编码效率。对于串行化二进制数据,base64是更好的选择(8位代表6,效率为75%)。



