我理解通过这样做改变包含二进制数据的字节数组
String s = new String(bytes);
可能会导致二进制数据的格式发生变化,因为它使用默认编码创建一个字符串,该编码可能会将某些二进制字符转换为未知字符,如“?”如果你将它转换回字节数组,那就错了。
目前我在ByteArrayInputStream中有一个mime,因为mime中的mime看起来像这样
--boundary
//content type, id, etc...
//empty line
//Binary Data
--boundary--
如果我不能首先将字节数组转换为字符串,如何从Inputstream中提取二进制数据并将其转换为Base64?我正在考虑使用边界来分割从Bytearrayinputstream转换的Sting,但这样做会在我想要将它编码为Base64之前弄乱二进制数据。
答案 0 :(得分:1)
如果在二进制数据中显示String的正确编码,则可以安全地将二进制转换为String!如果您知道您的二进制文件包含ISO8859-1中的字符串,请执行
new String(byteArray,"ISO8859-1")
没有任何东西丢失。并且为了您的信息:Base64-Encoded Strings仅包含ASCII字符,这些字符在UTF-8和所有典型的Windows和ISO编码中都是相同的,因此您不会遇到任何问题。
答案 1 :(得分:1)
你知道你有一条空行"在字节的中间(假设0x13或0x10字节值),所以只需寻找该字节,您就可以对原始字节数组进行分区。第一部分可以简单地映射到String,对于二进制数据,您现在可以获得偏移量,长度和字节数据,这就是您所需要的。