![](/img/trans.png)
[英]java.lang.UnsupportedOperationException at java.nio.ByteBuffer.arrayOffset?
[英]java.lang.UnsupportedOperationException at java.nio.ByteBuffer.array(ByteBuffer.java:959)
以下Java代码可以编译,但是在运行时会出错:
# javac ByteBufTest.java
# java ByteBufTest
Exception in thread "main" java.lang.UnsupportedOperationException
at java.nio.ByteBuffer.array(ByteBuffer.java:959)
at ByteBufTest.<init>(ByteBufTest.java:12)
at ByteBufTest.main(ByteBufTest.java:33)
#
为什么会这样?
注意:接下来,我需要在JNI中使用mDirectBuffer,因此必须使用ByteBuffer.allocateDirect(TEST_BUFFER_SIZE)函数。
ByteBufTest.java
:
import java.nio.ByteBuffer;
public class ByteBufTest {
public static final int TEST_BUFFER_SIZE = 128;
private ByteBuffer mDirectBuffer;
public ByteBufTest() {
mDirectBuffer = ByteBuffer.allocateDirect(TEST_BUFFER_SIZE);
byte[] buf = mDirectBuffer.array();
buf[1]=100;
}
public void test() {
printBuffer("nativeInitDirectBuffer",mDirectBuffer.array());
}
private void printBuffer( String tag, byte[] buffer ) {
StringBuffer sBuffer = new StringBuffer();
for( int i=0; i<buffer.length; i++ ) {
sBuffer.append(buffer[i]);
sBuffer.append(" ");
}
//System.out.println(tag+sBuffer);
}
public static void main(String[] args) throws Exception {
ByteBufTest item = new ByteBufTest();
item.test();
}
}
这是预期的行为。 Javadoc声明
抛出UnsupportedOperationException-如果此缓冲区未由可访问数组支持
您应该尝试其他方法或搜索其他实现,例如
mDirectBuffer = ByteBuffer.wrap(new byte[TEST_BUFFER_SIZE]);
如果结果缓冲区没有由可访问数组支持,则在运行时会发生此异常。 您可以尝试allocate()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.