[英]How to use ByteArrayOutputStream and DataOutputStream simultaneously in Java?
我在這里遇到了很大的問題,我認為這是因為我不太明白應該如何使用Java提供的API。
我需要將int
和byte[]
寫入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.