繁体   English   中英

如何在 Java 中同时使用 ByteArrayOutputStream 和 DataOutputStream?

[英]How to use ByteArrayOutputStream and DataOutputStream simultaneously in Java?

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

我需要将intbyte[]写入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();

使用前一种情况 - 将DataOutputStream包裹在ByteArrayOutputStream周围。 只需确保保存对ByteArrayOutputStream的引用。 完成后,关闭()或至少刷新() 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM