2011-08-03 45 views
2

我想將一個Double數組和兩個Long數組轉儲到一個bytebuffer中。我可以使用一個循環,並做將一個Double數組和兩個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

如果你真的想「批量轉儲」的數據,而不是在一些應用程序依賴的方式交錯,那麼你可以創建LongBufferDoubleBuffer意見到您的ByteBuffer。一般程序如下:

  1. 呼叫position()設置緩衝區的,無論你想存儲陣列的位置(你必須基於原語的大小來計算這一點)。
  2. 在緩衝區上調用slice()以創建共享後備存儲但偏移的新緩衝區。
  3. 在新緩衝區上調用asLongBuffer()asDouble()緩衝區。
  4. 呼叫在緩衝器中的散裝put()方法在步驟3中

此過程中產生的是一個方便的,性能增強。除非你在談論數千萬個元素,否則你根本不可能看到任何改進,即使這樣你可能也會看到微秒。

相關問題