簡體   English   中英

如何在 Java 中同時使用 ByteArrayOutputStream 和 DataOutputStream?

[英]How to use ByteArrayOutputStream and DataOutputStream simultaneously in Java?

我在這里遇到了很大的問題,我認為這是因為我不太明白應該如何使用Java提供的API。

我需要將intbyte[]寫入byte[]

我想使用DataOutputStream來解決writeInt(int i)write(byte[] b)的數據寫入,並且能夠將其放入字節數組中,我應該使用ByteArrayOutputStream方法toByteArray().

我知道這些類使用 Wrapper 模式,所以我有兩個選擇:

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

或者

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

但在這兩種情況下,我都“放松”了一種方法。 在第一種情況下,我無法訪問toByteArray()方法,而在第二種情況下,我無法訪問writeInt()方法。

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

像這樣:

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

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

w.flush();

byte[] result = baos.toByteArray();

實際上,您的第二個版本根本不起作用。 DataOutputStream需要一個實際的目標流來寫入數據。 你不能做new DataOutputStream() 實際上沒有任何這樣的構造函數。

您能否創建一個變量來保持 ByteArrayOutputStream 並將其傳遞到 DataOutputStream 中。

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

使用前一種情況 - 將DataOutputStream包裹在ByteArrayOutputStream周圍。 只需確保保存對ByteArrayOutputStream的引用。 完成后,關閉()或至少刷新() DataOutputStream ,然后使用ByteArrayOutputStream的 toByteArray 方法。

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

無論如何,如果您需要做的很簡單並且不需要流方法,我將使用您擁有的java.nio.ByteBuffer

  • put(byte[] src)為你的byte[]
  • putInt(int value)
  • byte[] array()來獲取內容

你不需要更多這樣的

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

Integer 類有一個方法來獲取一個 int 的字節值。 Integer.byteValue()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM