如何在Java中同时使用ByteArrayOutputStream和DataOutputStream?
我在这里遇到了一个相当大的问题,我认为这是因为我不太理解如何使用Java提供的API 我需要将一个如何在Java中同时使用ByteArrayOutputStream和DataOutputStream?,java,wrapper,bytearrayoutputstream,dataoutputstream,Java,Wrapper,Bytearrayoutputstream,Dataoutputstream,我在这里遇到了一个相当大的问题,我认为这是因为我不太理解如何使用Java提供的API 我需要将一个int和一个字节[]写入一个字节[] 我想使用DataOutputStream来解决writeInt(inti)和write(byte[]b)的数据写入问题,为了能够将其放入字节数组,我应该使用ByteArrayOutputStream方法toByteArray() 我知道这些类使用包装器模式,所以我有两个选择: DataOutputStream w = new DataOutputStream(n
int
和一个字节[]
写入一个字节[]
我想使用DataOutputStream
来解决writeInt(inti)
和write(byte[]b)
的数据写入问题,为了能够将其放入字节数组,我应该使用ByteArrayOutputStream
方法toByteArray()
我知道这些类使用包装器模式,所以我有两个选择:
DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());
或
但在这两种情况下,我都“放松”了一种方法。在第一种情况下,我无法访问toByteArray()
方法,在第二种情况下,我无法访问writeInt()
方法
我应该如何一起使用这些类?如下所示:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream w = new DataOutputStream(baos);
w.writeInt(100);
w.write(byteArray);
w.flush();
byte[] result = baos.toByteArray();
实际上,你的第二个版本根本不起作用DataOutputStream
需要一个实际的目标流来写入数据。您不能执行新建DataOutputStream()
。实际上没有任何这样的构造函数。使用前一个case-wrapDataOutputStream
围绕ByteArrayOutputStream
。只需确保通过tearrayoutputstream保存对的引用即可。完成后,关闭()或至少刷新()数据输出流
,然后使用ByteArrayOutputStream的toByteArray方法
Integer类有一个获取int的字节值的方法。
如果您通过PipedInputStream
/PipetOutputStream
将输出流连接到输入流,则可以使用流方法。然后您将使用inputstream中的数据
无论如何,如果您需要做的是简单的,并且不需要流方法,那么我将使用一个
put(byte[]src)
为您的byte[]
putInt(int值)
- 和
字节[]数组()
来获取内容
您是否可以创建一个变量来保存ByteArrayOutputStream并将其传递到DataOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();
你不需要更多像这样的东西
Example exampleExample = method(example);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos);
Message message = MessageBuilder.withBody(baos.toByteArray()).build();
我一直在想,我真的有理由用tearrayoutputstream刷新包装的吗?没有,但你永远不知道包装的行为。它实际上可以缓冲一些东西,所以我习惯性地刷新包装器:)。如果它是一个pass-thru包装器,它应该不会受到影响。您能声明byteArray变量吗?实际上w.写了什么(byteArray);是吗?啊,它现在可以工作了,我的十六进制编辑器有一些问题(我写它到文件中只是为了证明它和它的工作)欢迎使用stackoverflow!请考虑用代码编制格式>代码>代码>代码,这样阅读起来更容易。更多信息:
Example exampleExample = method(example);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos);
Message message = MessageBuilder.withBody(baos.toByteArray()).build();