2013-11-04 47 views
0

我目前正試圖將JPEG圖像從本地Java項目目錄轉換爲通過tcp連接發送的字節數組。圖像到字節數組不一致

這是目前我如何爲我的文件轉換爲字節數組:

BufferedImage imageBuff = ImageIO.read(new File("res/image.jpg")); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(imageBuff, "JPEG", baos); 
byte[] res = baos.toByteArray(); 
System.out.println(baos.toByteArray()); 

我似乎無法找到一個堅實的答案,爲什麼發生這種情況,但每一次我把它轉換該數據並不一致:

系統輸出:

[[email protected] 
[[email protected] 
[[email protected] 

究竟是應該看起來像字節數組?很不幸,這顯然不適用於TCP連接的另一端。我認爲每次嘗試轉換它時都會有相同的輸出,不是嗎?

回答

1

你在一個byte[]調用toString可以使用。數組不會覆蓋toString(),所以你看到的implementation in Object

Object類的toString方法返回一個包含其中的對象是其實例的類的名稱的字符串,則在符號字符`@'和對象的哈希碼的無符號十六進制表示。換句話說,此方法返回一個字符串等於的值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

因此,換句話說,其具有無關的字節數組內的數據。使用Arrays.toString(byte[])來得到一個實際看起來合理的字符串表示 - 雖然你可能會發現十六進制轉換更容易閱讀。

+0

非常感謝您的解釋!絕對有道理,我在做什麼,爲什麼每次都會有所不同。 – rwarner

0

[[email protected]是數組對象的字符串表示形式,而不是數組的內容。

System.out.println(Arrays.toString(baos.toByteArray()));

0

您正在打印出有關陣列本身的信息(具體來說,數組類型[Bbyte[],然後是指向數組內容的指針)。您可能要打印Arrays.toString(res)