首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将[]字节转换为长整型时的java.nio.BufferUnderflowException

将[]字节转换为长整型时的java.nio.BufferUnderflowException
EN

Stack Overflow用户
提问于 2016-07-08 14:53:03
回答 2查看 1.2K关注 0票数 0

我的字节数组有问题。我尝试将其转换为long,然后转换为十六进制,并将其显示为吐司。然而,我得到了java.nio.BufferUnderflowException。下面是我的代码:

代码语言:javascript
复制
 public void onReceivedData(byte[] arg0)
        {
            String tag = null;
            long tagValue = ByteBuffer.wrap(arg0).getLong();
            tag = Long.toHexString(tagValue).toUpperCase();

}

问题出在line:

代码语言:javascript
复制
        long tagValue = ByteBuffer.wrap(arg0).getLong();

我寻找了关于这个异常的信息,但没有一个答案是我问题的解决方案。

这是logcat:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2016-07-08 15:47:28

因为你似乎有一个可变的字节数:

代码语言:javascript
复制
arg0 = Arrays.copy(arg0, 8);

因此,对于long: xx xx ... 00 00,有8个字节

或者,您可能只需要字节数组的十六进制转储:

代码语言:javascript
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2016-07-08 15:31:57

在从ByteBuffer获取长值之前添加检查

代码语言:javascript
复制
ByteBuffer byteBuffer = ByteBuffer.wrap(arg0);
            if(byteBuffer.remaining()>0){
                long tagValue= byteBuffer.getLong();
                tag = Long.toHexString(tagValue).toUpperCase();
            }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38260584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档