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