2010-06-06 67 views
11

我在這裏遇到了相當多的問題,我認爲這是因爲我不太瞭解如何使用Java提供的API。如何同時使用ByteArrayOutputStream和DataOutputStream(Java)

我需要編寫一個intbyte[]byte[]

我想用一個DataOutputStream解決數據與writeInt(int i)write(byte[] b)寫作,並能夠將它放入一個字節數組,我應該使用ByteArrayOutputStream方法toByteArray().

據我所知,這個類使用的包裝圖案,所以我有兩個選擇:

DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream()); 

ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream()); 

但在這兩種情況下,I 「鬆散」 的方法。在第一種情況下,我無法訪問toByteArray()方法,而在第二種情況下,我無法訪問writeInt()方法。

我應該如何一起使用這個類?

回答

35

像這樣:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream w = new DataOutputStream(baos); 

w.writeInt(100); 
w.write(byteArray); 

w.flush(); 

byte[] result = baos.toByteArray(); 

其實你的第二個版本將無法工作。 DataOutputStream需要在其中寫入數據的實際目標流。你不能做new DataOutputStream()。實際上並沒有這樣的構造函數。

+0

我一直在想,是真的有我的理由刷新包裹'ByteArrayOutputStream'? – Justin 2010-06-06 14:49:25

+0

有沒有,但你永遠不知道包裝的行爲。它實際上可以緩衝一些東西,所以我通過習慣刷新包裝:)。如果它是一個傳遞包裝,它不應該傷害。 – 2010-06-06 17:37:30

+0

你可以聲明byteArray變量嗎?和什麼其實w.write(byteArray);做? – 2012-06-30 01:49:21

1

使用前一種情況 - 換行DataOutputStream圍繞ByteArrayOutputStream。只要確保保存對ByteArrayOutputStream的引用即可。當您完成關閉()或至少flush()DataOutputStream,然後使用ByteArrayOutputStream的toByteArray方法時。

1

如果通過PipedInputStream/PipetOutputStream將輸出流連接到輸入流,則可以使用流方法。然後你將使用輸入流中的數據。

無論如何,如果你需要做的很簡單,不不需要流的方法,我會用一個java.nio.ByteBuffer您擁有

  • put(byte[] src)byte[]
  • putInt(int value)
  • byte[] array()獲取內容
2

您可以讓一個變量來保存ByteArrayOutpu tStream並將其傳遞到DataOutputStream。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream dos = new DataOutputStream(baos); 
dos.writeInt(1); 
byte[] result = dos.toByteArray(); 
1

你鴕鳥政策需要更多像這樣

Example exampleExample = method(example); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos); 
Message message = MessageBuilder.withBody(baos.toByteArray()).build(); 
+0

歡迎來到stackoverflow!請考慮**使用降價格式**'代碼',以便閱讀。更多信息:http://stackoverflow.com/editing-help – Aloso 2017-04-03 17:53:59

+0

謝謝抱歉 – mantamusica 2017-05-17 11:15:52

相關問題