2013-02-28 74 views
0

我一直在尋找一種方法將FloatBuffer數組轉換爲字節數組。我已經找到一種方法來一個FloatBuffer對象轉換爲字節[]: convert from floatbuffer to byte[]將FloatBuffer []轉換爲字節[]

但在互聯網上搜索了幾個小時,我一直沒能找到等同的東西從FloatBuffer []轉換後。

而做反,從字節[]轉換爲FloatBuffer [],我只發現這一點:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(floatBufferObject);
byte [] descriptorsBytes = bos.toByteArray();

但似乎有點奇怪沒有一個簡單的方法做這個。 也許我錯過了非常明顯的東西,也許我應該將FloatBuffer數組轉換爲其他類型,更簡單的轉換爲字節數組?

回答

0

您已經對如何將一個FloatBuffer轉換爲答案一個字節數組,所以簡單地擴展它來轉換它們的一個數組:

final FloatBuffer[] floatBuffers = new FloatBuffer[] {...}; 
final ByteBuffer byteBuffer = ByteBuffer.allocate(sumOfFloatBufferCapacities) * 4); 
final FloatBuffer floatBufView = byteBuffer.asFloatBuffer(); 
for (final FloatBuffer fBuf : floatBuffers) { 
    floatBufView.put(fBuf); 
} 
byte[] data = byteBuffer.array(); 

以上是僞代碼,您可以根據自己的需要進行調整。

+0

謝謝,它的工作原理。現在我試圖將字節數組轉換回FloatBuffer [],像這樣做:FloatBuffer fb = ByteBuffer.wrap(byteArray).asFloatBuffer();但是這只是檢索一行數組。有沒有辦法讓它作爲FloatBuffer [],或者我必須做另一個分割它在不同的行......? – 2013-02-28 05:34:33

+0

@MarciaGarcia - 一旦你合併了數組,你無法確定哪些浮點應該到哪裏,除非你在外部跟蹤(例如在整數列表中)應該進入每個FloatBuffer的浮點數。 – Perception 2013-02-28 06:32:59

2

想要一個FloatBuffer或多個?

要從FloatBuffer轉換爲byte[],你可以不喜歡

FloatBuffer input; 
byte[] output = new byte[input.capacity() * 4]; 
ByteBuffer.wrap(output).asFloatBuffer().put(input); 

其他方向也只是

ByteBuffer.wrap(byteArray).asFloatBuffer() 
+0

問題是我沒有一個簡單FloatBuffer,我FloatBuffer對象的數組。這個「FloatBuffer []」對象沒有像「get」,「put」,「wrap」這樣的方法。只有FloatBuffer數組的每一行,可以作爲floatBufferArray [i]訪問,這些方法都可用。 – 2013-02-28 04:09:11

+0

然後你必須一次完成一個,但是這些實現應該給你一個關於如何在FloatBuffer和字節之間轉換每一行的想法。 – 2013-02-28 04:12:30

+0

但是,因爲我需要將字節數組存儲在數據庫中,所以我必須將其作爲一個字節數組存儲,而不是FloatBuffer數組的每個FloatBuffer行。因此,如果我一次執行一個FloatBuffer,我將有多個字節數組... – 2013-02-28 04:15:31

0

轉換FloatBuffer []爲byte []:

FloatBuffer[] buffers = ... 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    for (FloatBuffer fb : buffers) { 
     ByteBuffer byteBuffer = ByteBuffer.allocate(fb.capacity() * 4); 
     byteBuffer.asFloatBuffer().put(fb); 
     bos.write(byteBuffer.array()); 
    } 
    byte[] ba = bos.toByteArray();