我正在編寫一個小型的基於Java的Android應用程序,它從藍牙芯片接收一個基於c的unsigned char []字節數組並將其流式傳輸到一個字節數組中。在Java中,爲什麼我的字節數組的元素包含2個字節?
雖然它是Android和藍牙的事實應該不重要,但它只是背景。但是,如果這有所作爲,我正在使用最低API 8。
主要代碼:
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
byte[] buffer = new byte[1024];
bytesRead = dis.read(buffer, 0, 1024);
然而,當我看緩衝器的實際內容,我看到:
[0] 15 [0xf] [^O]
[1] 15 [0xf] [^O]
[2] 0 [0x0] [^@ (NUL)]
[3] -119 [137] [0x89] [^É]
[4] 2 [0x2] [^B]
[5] 6 [0x6] [^F]
[6] 26 [0x1a] [^Z]
[7] -47 [209] [0xd1] [Ñ]
[8] -1 [255] [0xff] [ÿ]
[9] 104 [0x68] [h]
[10] -1 [255] [0xff] [ÿ]
[11] -46 [210] [0xd2] [Ò]
[12] -1 [255] [0xff] [ÿ]
[13] 104 [0x68] [h]
[14] -19 [237] [0xed] [í]
[15] -128 [128] [0x80] [^À]
以上是從蝕表達視圖副本設定爲顯示
- 元素[#]
- 符號int值
- 如果是負數,無符號整型值,該值不會出現,除非#2負]
- 十六進制值
- ASCII值
我的問題是,如果這是一個字節數組,爲什麼是一些包含2個字節的十六進制值。看看元素6到14,它們都是0x1a,0x12,0xff等形式。字節0到5都是一個字節(元素3除外)。
我不認爲這是藍牙方面的問題,因爲我看到了實際的代碼,並且它是一個無符號的char []數組,每個元素只有一個字節。另外,我記得在之前的一個涉及從在線API獲取數據流的小項目中看到類似的情況。
如何確保Java數組元素只包含1個字節?而對於這個問題,我覺得我不瞭解Java的一些重要內容,因爲這讓我感到困惑 - Java如何允許一個字節數組在每個元素中包含多個字節?
我剛剛意識到,也許我應該使用ByteArrayInputStream而不是DataInputStream ...但不管怎樣,每個元素包含多於1個字節的字節數組的這個問題不應該出現。 – 2013-04-05 07:46:38
十六進制字符需要4位,所以FF = 1111 1111 - >一個字節 0,1,2,4和5的值足夠小,可以用4位表示,全部是 – 2013-04-05 07:51:30