13

我在这里遇到了很大的问题,我认为这是因为我不太了解我应该如何使用Java提供的API。

我需要将 aint和 abyte[]写入 a byte[]

我想用 aDataOutputStream来解决用writeInt(int i)and写入的数据write(byte[] b),并且能够将它放入一个字节数组中,我应该使用ByteArrayOutputStream方法toByteArray().

我知道这些类使用 Wrapper 模式,所以我有两个选择:

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

或者

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

但在这两种情况下,我都“失去”了一种方法。在第一种情况下,我无法访问该toByteArray()方法,在第二种情况下,我无法访问该writeInt()方法。

我应该如何一起使用这些课程?

4

6 回答 6

42

像这样:

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

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

w.flush();

byte[] result = baos.toByteArray();

实际上,您的第二个版本根本不起作用。DataOutputStream需要一个实际的目标流来写入数据。你不能这样做new DataOutputStream()。实际上没有任何这样的构造函数。

于 2010-06-06T14:35:41.870 回答
3

您能否创建一个变量以保留 ByteArrayOutputStream 并将其传递给 DataOutputStream。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();
于 2010-06-06T14:41:16.253 回答
2

使用前一种情况 -DataOutputStream环绕ByteArrayOutputStream. 只需确保将引用保存到ByteArrayOutputStream. 完成后,close() 或至少 flush() DataOutputStream,然后使用ByteArrayOutputStream.

于 2010-06-06T14:36:23.790 回答
1

如果您通过PipedInputStream/将输出流连接到输入流,则可以使用流方法PipetOutputStream。然后,您将使用输入流中的数据。

无论如何,如果您需要做的事情很简单并且不需要流方法,我会使用java.nio.ByteBuffer您拥有的

  • put(byte[] src)为您byte[]
  • putInt(int value)
  • byte[] array()获取内容
于 2010-06-06T14:40:06.777 回答
1

你不需要更多这样的

Example exampleExample = method(example); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos);
Message message = MessageBuilder.withBody(baos.toByteArray()).build();
于 2017-04-03T16:10:00.657 回答
0

Integer 类有一个方法来获取 int 的字节值。 Integer.byteValue()

于 2010-06-06T14:36:48.680 回答