如何同时使用bytearrayoutputstream和dataOutputStream(Java)
-
24-10-2019 - |
题
我在这里遇到一个很大的问题,我认为这是因为我不太了解如何使用Java提供的API。
我需要写一个 int
和 byte[]
进入 byte[]
我想到了 DataOutputStream
用 writeInt(int i)
和 write(byte[] b)
, ,为了能够将其放入字节阵列中,我应该使用 ByteArrayOutputStream
方法 toByteArray().
我了解此类使用包装器图案,因此我有两个选择:
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
. 。当您结束时()或至少flush()() DataOutputStream
然后使用TobyTearray方法 ByteArrayOutputStream
.
如果将输出流连接到输入流,则可以使用流方式 PipedInputStream
/PipetOutputStream
. 。然后,您将消耗来自InputStream的数据。
无论如何,如果您需要做的事情很简单,并且不需要流方法,我会使用 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();
整数类具有获取int字节值的方法。Integer.byteValue()