0
上失败
在Android Ice Cream Sandwitch和Jelly Bean中的ByteBuffer实现中存在奇怪的行为。事情是,get
方法抛出BufferUnderflowException。它不在Froyo,GingerBread,Kitkat和Lollipop。ByteBuffer.get(byte [],int,int)在Android ICS和JB
printAndRewind(byteBuffer);
printAndRewind(byteBuffer);
try {
byteBuffer.get(tagIdentifier, 0, 3);
} catch (BufferUnderflowException e) {
logger.info("This will be printed in ICS & JB " + e);
byteBuffer.rewind();
}
这是printAndRewind方法:
private void printAndRewind(ByteBuffer byteBuffer) {
StringBuilder builder = new StringBuilder();
while (byteBuffer.hasRemaining()) {
builder.append(", ").append(byteBuffer.get());
}
logger.info(builder.toString());
byteBuffer.rewind();
}
它是错误吗?如果是这样,那么如何克服这个问题呢?我有一个很大程度上依赖于ByteBuffer的库。谢谢
根据http://developer.android.com/reference/java/nio/ByteBuffer.html#get(字节[] ,int,int)异常是当'byteCount> remaining()'' – tofi9 2015-02-07 05:01:51
时的预期行为它回答为什么问题不会发生在GingerBread和Froyo? – sancho21 2015-02-07 05:11:47
不,它不需要。我的观点是,你的代码首先是错误的。如果你的代码没有按照规范行事,你就不会说错误。当byteBuffer的可用字节少于3个字节时,你的代码如何知道有多少字节实际上被复制到'tagIdentifier'中? – tofi9 2015-02-07 05:16:52