Android UsbRequest.queue(ByteBuffer) 忽略位置、限制等?
Android UsbRequest.queue(ByteBuffer) ignores position, limit, etc.?
我目前在使用 UsbRequest.queue(ByteBuffer, int) 时遇到问题。
似乎忽略了ByteBuffer的位置,总是从缓冲区的0位置开始写入。然后它将缓冲区的位置设置为读取的字节?
怎么会被忽略呢?关于如何在 ByteBuffer 中指定起始位置有什么想法吗?
谢谢,
马格努斯
EDIT2:所以我现在基本上做的是使用临时缓冲区,然后将数据相应地复制到最终缓冲区。
编辑:这不是解决方案! wrap 只是将 ByteBuffer 的位置设置为偏移量。
好的,我找到了使用 ByteBuffer#wrap(byte[] array, int offset, int length)
的解决方法
int length = dest.remaining();
// workaround: UsbRequest.queue always writes at position 0 :/
ByteBuffer tmp = ByteBuffer.wrap(dest.array(), dest.position(), length);
if(!inRequest.queue(tmp, length)) {
throw new IOException("Error queueing request.");
}
UsbRequest request = deviceConnection.requestWait();
if (request == inRequest) {
dest.position(dest.position() + tmp.position());
return tmp.position();
}
throw new IOException("requestWait failed! Request: " + request);
我目前在使用 UsbRequest.queue(ByteBuffer, int) 时遇到问题。
似乎忽略了ByteBuffer的位置,总是从缓冲区的0位置开始写入。然后它将缓冲区的位置设置为读取的字节?
怎么会被忽略呢?关于如何在 ByteBuffer 中指定起始位置有什么想法吗?
谢谢, 马格努斯
EDIT2:所以我现在基本上做的是使用临时缓冲区,然后将数据相应地复制到最终缓冲区。
编辑:这不是解决方案! wrap 只是将 ByteBuffer 的位置设置为偏移量。
好的,我找到了使用 ByteBuffer#wrap(byte[] array, int offset, int length)
的解决方法 int length = dest.remaining();
// workaround: UsbRequest.queue always writes at position 0 :/
ByteBuffer tmp = ByteBuffer.wrap(dest.array(), dest.position(), length);
if(!inRequest.queue(tmp, length)) {
throw new IOException("Error queueing request.");
}
UsbRequest request = deviceConnection.requestWait();
if (request == inRequest) {
dest.position(dest.position() + tmp.position());
return tmp.position();
}
throw new IOException("requestWait failed! Request: " + request);