2016-08-03 12 views
2

私はproject.Canを実行している間、次のエラーが発生しました。ByteBufferAsShortBufferはjava.nio.FloatBufferにキャストできません

と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

バッファAFAIKで効率的に処理できません。したがって、ByteArrayOutputStream、DataOutputStreamなどです。 –

+1

エラーはかなり明確です。あなたがしようとしているキャストはできません。 http://stackoverflow.com/questions/907360/can-someone-explain-classcastexception-in-java –

+0

その後、鋳造のための解決策を教えてください。@Christopher Schneider –

答えて

1

を助けてくださいので、私が思っていたほど、それほどエレガントではありませんでした。あなたがなぜ尋ねたのか分かります。余分なメモリを割り当てることなく、あなたがしたいことをする方法を見つけることができませんでした。

これはShortBufferFloatBufferに移動するためのすばやく汚れた方法です。

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(); 
    } 

パフォーマンスが重要であり、あなたは、これらの操作のトンをやっている場合は、それが直接バイトを操作したり、のrenderScriptのようなものを使用するネイティブ(C/C++)コードを使用して見てすることをお勧めします。

+0

お返事ありがとう –

関連する問題