[英]How to use ByteArrayOutputStream and DataOutputStream simultaneously in 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();
使用前一种情况 - 将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.