【发布时间】:2015-02-07 13:37:46
【问题描述】:
Android Ice Cream Sandwitch 和 Jelly Bean 中的 ByteBuffer 实现存在奇怪的行为。问题是,get 方法会抛出 BufferUnderflowException。 Froyo、GingerBread、Kitkat 和 Lollipop 中没有。
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 的库。谢谢
【问题讨论】:
-
根据developer.android.com/reference/java/nio/…, int, int) 异常是
byteCount > remaining()时的预期行为 -
它是否回答了为什么 GingerBread 和 Froyo 不会出现问题??
-
不,不需要。我的观点是,您的代码首先是错误的。如果你的代码没有按照规范行事,你就不能说是一个错误。当
byteBuffer的可用字节少于 3 个时,您的代码如何知道实际复制到tagIdentifier的字节数? -
我不是编程的孩子。当然,我已经检查了前面的行。为简洁起见,我删除了检查代码。
-
对给您带来的不便深表歉意:)
标签: android