我在这里遇到了很多问题,我认为这是因为我不太了解如何使用Java提供的API。
我需要将int
和byte[]
写入byte[]
我想使用DataOutputStream
来解决使用writeInt(int i)
和write(byte[] b)
的数据写入,并且为了能够将其放入字节数组中,我应该使用{{1}方法ByteArrayOutputStream
我知道这些类使用Wrapper模式,所以我有两个选择:
toByteArray().
或
DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());
但在这两种情况下,我都“松散”了一种方法。在第一种情况下,我无法访问ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());
方法,而在第二种情况下,我无法访问toByteArray()
方法。
我应该如何一起使用这些课程?
答案 0 :(得分:38)
像这样:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream w = new DataOutputStream(baos);
w.writeInt(100);
w.write(byteArray);
w.flush();
byte[] result = baos.toByteArray();
实际上你的第二个版本根本不起作用。 DataOutputStream
需要一个实际的目标流来写入数据。你做不到new DataOutputStream()
。实际上并没有像这样的构造函数。
答案 1 :(得分:2)
您是否可以创建一个变量来保留ByteArrayOutputStream并将其传递给DataOutputStream。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();
答案 2 :(得分:1)
使用前一种情况 - 围绕DataOutputStream
包裹ByteArrayOutputStream
。只需确保将引用保存到ByteArrayOutputStream
即可。当你完成close()或至少flush()DataOutputStream
然后使用ByteArrayOutputStream
的toByteArray方法时。
答案 3 :(得分:1)
如果您通过PipedInputStream
/ PipetOutputStream
将输出流连接到输入流,则可以使用流方法。然后,您将使用输入流中的数据。
无论如何,如果您需要做的事情很简单并且不需要流方法,我会使用您拥有的java.nio.ByteBuffer
put(byte[] src)
代表byte[]
putInt(int value)
byte[] array()
获取内容答案 4 :(得分:1)
你不需要更多这样的
Example exampleExample = method(example);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos);
Message message = MessageBuilder.withBody(baos.toByteArray()).build();
答案 5 :(得分:0)
Integer类有一个获取int的字节值的方法。
Integer.byteValue()