我在运行项目时遇到以下错误。任何人都可以帮助我?
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);
}
请帮忙
答案 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的内容。