6

我在 Android 3.1 中遇到了 UsbRequest 类的问题。

这是我的代码:

ByteBuffer buffer = ByteBuffer.allocate(4096);
buffer.order(ByteOrder.LITTLE_ENDIAN);
UsbRequest request = new UsbRequest();
request.initialize(mConnection, mEndpointIn);
request.queue(buffer, 4096);

if (mConnection.requestWait() == request) {
   byte[] data = buffer.array();
}

数组的大小data为 4096,但实际接收到的字节长度要小得多。

我如何确定真正收到的字节的大小?

谢谢。

4

4 回答 4

5

这是Android 中的一个错误。在受影响的版本上,没有解决方法,因为实现根本没有通过长度。

它已在 JB-MR1(API 级别 17 及以上)中修复。

于 2013-02-06T17:43:57.427 回答
3

在我看来,当前的异步 USB API 没有办法返回读取大小。2个“解决方法”使用同步传输,因为您在那里收到读/写的字节数,或者您正在实施的协议可能会向您发送您将收到的字节数。例如,我目前正在实现一些我收到的每个更高级别的数据包在数据包的前 4 个字节中都有字节数的东西。根据这个数字,我知道我是否必须进行多次读取。

于 2011-09-02T17:31:20.623 回答
1

您可以使用request.queue(buffer, bufferLength);. 这应该可以解决您的问题。现在,您应该参考 android 文档,它有据可查且很有帮助。

于 2012-10-31T07:04:30.150 回答
0

I believe buffer.limit() should return the number of received bytes. Does that work?

于 2011-08-02T17:00:22.317 回答