ByteBufferAsShortBuffer无法强制转换为java.nio.FloatBuffer

时间:2016-08-03 13:31:46

标签: java android android-studio

我在运行项目时遇到以下错误。任何人都可以帮助我?

java.lang.ClassCastException:java.nio.ByteBufferAsShortBuffer无法强制转换为java.nio.FloatBuffer

这是我的代码:

Buffer[] samples = frame.samples;
                       if (aaD.track.getChannelCount() == 1)
//For using with mono track
                        {
                            Buffer b = samples[0];
                            fb = ((ByteBuffer) b.rewind()).asFloatBuffer();//here is error
                            fb.rewind();
                            smpls = new float[fb.capacity()];
                            fb.get(smpls);
                        } 

请帮忙

1 个答案:

答案 0 :(得分:1)

所以解决方案并不像我想象的那么优雅。我明白你问的原因。如果不分配额外的内存,我找不到办法做你想做的事。

这是将ShortBuffer移至FloatBuffer的快捷方式。

   public FloatBuffer fBuffer(){
        ShortBuffer sb = ShortBuffer.allocate(4);
        sb.put(new short[]{256,256,128,64});

        short[] shortArr = sb.array();  
        ByteBuffer bb = ByteBuffer.allocate(shortArr.length * 2);
        bb.asShortBuffer().put(shortArr);

        return bb.asFloatBuffer();
    }

如果性能至关重要并且您正在进行大量的这些操作,那么最好使用本机(C / C ++)代码直接操作字节或使用类似Renderscript的内容。