繁体   English   中英

java.nio.ByteBuffer.array上的java.lang.UnsupportedOperationException(ByteBuffer.java:959)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM