我正在编写一个基于 Java 的小型 Android 应用程序,该应用程序从蓝牙芯片接收基于 ac 的 unsigned char[] 字节数组并将其流式传输到字节数组中。
它是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] [^À]
以上是设置为显示的 eclipse Expression 视图的副本
- 元素 [#]
- 有符号整数值
- 如果为负,则为无符号整数值 [除非#2 为负,否则此值不会出现]
- 十六进制值
- ASCII 值
我的问题是,如果这是一个字节数组,为什么某些十六进制值包含 2 个字节。查看元素 6 到 14,它们中的每一个都是 0x1a、0x12、0xff 等形式。字节 0 到 5 都是一个字节(除了元素 3)。
我认为这不是蓝牙方面的问题,因为我看到正在制作的实际代码,它是一个无符号字符 [] 数组,每个元素只有一个字节。另外,我记得在之前的一个涉及从在线 API 获取数据流的小项目中看到过类似的东西。
如何确保 Java 数组元素仅包含 1 个字节?就此而言,我觉得我不了解 Java 的一些重要内容,因为这让我感到困惑——Java 如何允许一个字节数组每个元素包含一个以上的字节?