2011-08-03 7 views
2

ダブルバッファと2つのLong配列をバイトバッファにダンプします。私はループを使用して行うことができます1つのDouble配列と2つのLong配列をJavaのByteBufferにダンプする

double[] arr1 = new double[size]; 
long[] arr2 = new long[size]; 
long[] arr3 = new long[size]; 
for(int i=0;i<size;i++){ 
    buffer.putDouble(arr1[i]); 
    buffer.putLong(arr2[i]); 
    buffer.putLong(arr3[i]); 
} 

これは効率的ではないようです。それらをボークする方法はありますか?

+2

私があなたの場合は、これが遅すぎると想定する前に、一般的な入力のスループットを測定します。 – NPE

+0

あなたはそれらを "一括ダンピング"していません、あなたはデータをインターリーブしています。そして、あなたがこれをやりたいことを知っているJDKには何もありません。 – parsifal

答えて

2

アプリケーションに依存する方法でデータをインターリーブするのではなく、データを「バルクダンプ」したい場合はByteBufferLongBufferDoubleBufferビューを作成できます。次のように一般的な手順は次のとおりです。あなたは(あなたがプリミティブのサイズに基づいてこれを計算する必要があります)配列を格納したいどこにバッファの位置を設定する

  1. コールposition()
  2. バッファのslice()を呼び出して、バッキングストアを共有するがオフセットされた新しいバッファを作成します。
  3. 新しいバッファーにasLongBuffer()またはasDouble()バッファーを呼び出します。
  4. ステップ3

で作成したバッファにバルクput()メソッドを呼び出し、このプロセスは、便宜上、ない性能向上です。何千万もの要素を話しているのでなければ、まったく改善が見られず、おそらくマイクロ秒を目にしているでしょう。

関連する問題