2014-02-14 36 views
-3

我想知道爲什麼沒有IntegerArrayInputStream的類,因爲我有一個int數組能夠將int寫入圖像文件格式。我也看到如何將ints轉換爲字節有很多混淆。爲什麼沒有IntegerArrayInputStream類?

+0

請注意'ByteBuffer'可能適合在這裏。 –

+0

不是整數值表示字節的完全不同的值嗎? –

+0

如果你最終使用ByteArrayInputStream等自己寫一些東西,請記住,你可能需要更正「endian」的性質。 (在java中的整數不一定是/在二進制級別與其他地方的整數不等價) – Nick

回答

0

抱歉,但是如果你想寫整數的字節,你不能使用

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    DataOutputStream dos = new DataOutputStream(baos); 
    int x = 555; 
    dos.writeInt(x); 
    dos.close(); 

    byte[] bytes = baos.toByteArray(); 

    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes)); 
    int y = dis.readInt(); 
    System.out.println(y); 

+1

這會將'43'寫入流中。 ; ) – Radiodef

+0

這是真的:-) – Leo

+0

回答編輯。謝謝@Radiodef – Leo

3

任何函數庫可以提供多少限制;在某些時候,他們不得不說「如果你需要一個,寫一個或從JRE以外的其他軟件包中獲得一個。」你所提出的並不是特別頻繁需要的東西(與ByteArrayInputStream不同,它經常使用),也不是特別難以實現的東西,所以我並不感到驚訝,它並沒有削減。

1

原因是ByteArrayInputStream主要是爲了讓人們將整個字符串緩衝區(很容易變成字節數組)轉儲到文件中。目前已有Java庫實現這個目的僅僅是爲了圖像。但是字節數組比任何需要I/O的整數數組更適用於更廣泛的應用。

0

我在上面發表了一條評論,但我決定做一個完整的答案。部分原因是Integer類是Java特有的東西。如果你不關心可移植性,只想讀/寫一個Integer,Integer是可序列化的,你可以把它當作一個對象或者一個字符串值。這不是有效的,但它的工作原理。如果你關心可移植性,整數作爲原語是模糊的東西。它們可以在字節數,簽名或無符號和字節順序(字節順序)或這些事物的任意組合方面有所不同。另一方面,字節數組在大多數情況下總是以相同的方式在任何地方表示(「位 - 字節序」幾乎不存在,大多數人甚至會說它是一個神話:)並且可以安全地讀/寫在標準中辦法。

1

因爲有一個DataInputStream類和BufferedInputStream類一起做90%的工作,並且也覆蓋字節,字符,短褲,長整型,浮點和雙精度,而無需添加的Ñ類。

您不必爲每個需要的功能添加一個類。