如何同时使用ByteArrayOutputStream和DataOutputStream(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();
使用前一种情况 – 围绕ByteArrayOutputStream
包装DataOutputStream
。 只需确保将引用保存到ByteArrayOutputStream
。 当你完成close()或至少flush() 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()