我的字节数组有问题。我尝试将其转换为long,然后转换为十六进制,并将其显示为吐司。然而,我得到了java.nio.BufferUnderflowException。下面是我的代码:
public void onReceivedData(byte[] arg0)
{
String tag = null;
long tagValue = ByteBuffer.wrap(arg0).getLong();
tag = Long.toHexString(tagValue).toUpperCase();
}问题出在line:
long tagValue = ByteBuffer.wrap(arg0).getLong();我寻找了关于这个异常的信息,但没有一个答案是我问题的解决方案。
这是logcat:
Process: com.example.eltegps011.eltegps, PID: 17304
java.nio.BufferUnderflowException
at java.nio.ByteArrayBuffer.getLong(ByteArrayBuffer.java:211)
at com.example.eltegps011.eltegps.fragments.StocktakingFragment$9.onReceivedData(StocktakingFragment.java:504)
at com.felhr.usbserial.UsbSerialDevice$WorkerThread.onReceivedData(UsbSerialDevice.java:261)
at com.felhr.usbserial.UsbSerialDevice$WorkerThread.run(UsbSerialDevice.java:235)发布于 2016-07-08 15:47:28
因为你似乎有一个可变的字节数:
arg0 = Arrays.copy(arg0, 8);因此,对于long: xx xx ... 00 00,有8个字节
或者,您可能只需要字节数组的十六进制转储:
public String bytesToString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 3);
for (int i = 0; i < bytes.length; ++i) {
sb.append(String.format("%02X ", 0xFF & bytes[i]));
}
return sb.toString();
}发布于 2016-07-08 15:31:57
在从ByteBuffer获取长值之前添加检查
ByteBuffer byteBuffer = ByteBuffer.wrap(arg0);
if(byteBuffer.remaining()>0){
long tagValue= byteBuffer.getLong();
tag = Long.toHexString(tagValue).toUpperCase();
}https://stackoverflow.com/questions/38260584
复制相似问题