将字节数组转换为String时的格式更改

时间:2011-06-17 15:38:41

标签: java mime

参考这篇文章Why are the lengths different when converting a byte array to a String and then back to a byte array?

我理解通过这样做改变包含二进制数据的字节数组

 String s = new String(bytes);

可能会导致二进制数据的格式发生变化,因为它使用默认编码创建一个字符串,该编码可能会将某些二进制字符转换为未知字符,如“?”如果你将它转换回字节数组,那就错了。

目前我在ByteArrayInputStream中有一个mime,因为mime中的mime看起来像这样

--boundary
//content type, id, etc...
//empty line
//Binary Data
--boundary--

如果我不能首先将字节数组转换为字符串,如何从Inputstream中提取二进制数据并将其转换为Base64?我正在考虑使用边界来分割从Bytearrayinputstream转换的Sting,但这样做会在我想要将它编码为Base64之前弄乱二进制数据。

2 个答案:

答案 0 :(得分:1)

如果在二进制数据中显示String的正确编码,则可以安全地将二进制转换为String!如果您知道您的二进制文件包含ISO8859-1中的字符串,请执行

new String(byteArray,"ISO8859-1") 

没有任何东西丢失。并且为了您的信息:Base64-Encoded Strings仅包含ASCII字符,这些字符在UTF-8和所有典型的Windows和ISO编码中都是相同的,因此您不会遇到任何问题。

答案 1 :(得分:1)

你知道你有一条空行"在字节的中间(假设0x13或0x10字节值),所以只需寻找该字节,您就可以对原始字节数组进行分区。第一部分可以简单地映射到String,对于二进制数据,您现在可以获得偏移量,长度和字节数据,这就是您所需要的。