參考該交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一個啞劇由於啞劇啞劇,看起來像這樣
--boundary
//content type, id, etc...
//empty line
//Binary Data
--boundary--
如何從InputStream提取二進制數據,並將其轉換爲Base64如果我不能字節數組轉換爲一個字符串在第一個地方?我正在考慮使用邊界來分割從Bytearrayinputstream轉換來的Sting,但這樣做會在Binary數據編碼到Base64之前搞亂Binary數據。
感謝alphazero,那是讓我思考的最佳建議!我按字節讀取數組,並在它碰到LF + CR時將其轉換爲字符串。當它作爲一個字節數組轉換時它是一個空字符串,我將所有字節複製到另一個數組中,並在它碰到邊界時停止。然後由於後面增加了兩個LF + CR,我截斷了邊界長度爲+4的字節陣列。如果得出結論:如果在文件中混合使用二進制數據和文本,如果要保持二進制完整性,操縱它的唯一方法是在字節級別? – Maurice
據我所知。如果混合使用「數據類型」 - 意味着字節模式和類型語義之間的不同映射,例如UTF-8 - 在一個連續的字節塊(內存或文件,差異是什麼)中,您自然需要首先將該超級塊劃分爲一組統一數據語義的小塊。所以,解析你一定。 – alphazero