如何同时使用ByteArrayOutputStream和DataOutputStream(Java)


问题内容

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

我需要写一个int和一个byte[]到一个byte[]

我想到了使用a DataOutputStream来解决用writeInt(int i)和编写的数据write(byte[] b),并且能够将其放入字节数组中,我应该使用ByteArrayOutputStreammethodtoByteArray().

我知道此类使用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()。实际上没有像这样的构造函数。