如何在Java中同时使用ByteArrayOutputStream和DataOutputStream?
我在这里遇到了一个很大的问题,我认为这是因为我不太明白应该如何使用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()
方法。
我应该如何一起使用这些类?
I'm having quite a problem here, and I think it is because I don't understand very much how I should use the API provided by Java.
I need to write an int
and a byte[]
into a byte[]
.
I thought of using a DataOutputStream
to solve the data writing with writeInt(int i)
and write(byte[] b)
, and to be able to put that into a byte array, I should use ByteArrayOutputStream
method toByteArray().
I understand that this classes use the Wrapper pattern, so I had two options:
DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());
or
ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());
but in both cases, I "loose" a method. in the first case, I can't access the toByteArray()
method, and in the second, I can't access the writeInt()
method.
How should I use this classes together?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
就像这样:
实际上你的第二个版本根本无法工作。
DataOutputStream
需要一个实际的目标流来写入数据。您无法执行new DataOutputStream()
。实际上不存在这样的构造函数。Like this:
Actually your second version will not work at all.
DataOutputStream
requires an actual target stream in which to write the data. You can't donew DataOutputStream()
. There isn't actually any constructor like that.您可以创建一个变量来保存 ByteArrayOutputStream 并将其传递到 DataOutputStream 中吗?
Could you make a variable to hold on to the ByteArrayOutputStream and pass it into the DataOutputStream.
使用前一种情况 - 将
DataOutputStream
包裹在ByteArrayOutputStream
周围。只需确保保存对 ByteArrayOutputStream 的引用即可。完成后,close() 或至少flush()DataOutputStream
,然后使用ByteArrayOutputStream
的toByteArray 方法。Use the former case - wrap
DataOutputStream
around theByteArrayOutputStream
. Just make sure you save the reference to theByteArrayOutputStream
. When you are finished, close() or at least flush() theDataOutputStream
and then use the toByteArray method of theByteArrayOutputStream
.如果通过
PipedInputStream
/PipetOutputStream
将输出流连接到输入流,则可以使用流方法。然后您将使用输入流中的数据。无论如何,如果您需要做的事情很简单并且不需要流方法,我会使用您有
put(byte[] src)
java.nio.ByteBuffer 的方法code> 为您的byte[]
putInt(int value)
byte[] array()
获取内容You could use a stream approach if you connect your outputstream to an inputstream through a
PipedInputStream
/PipetOutputStream
. Then you will consume the data from the inputstream.Anyway if what you need to do is simple and doesn't not require a stream approach I would use a
java.nio.ByteBuffer
on which you haveput(byte[] src)
for yourbyte[]
putInt(int value)
byte[] array()
to get the content你不需要更多这样的
You don´t need more like this
Integer 类有一个方法来获取 int 的字节值。
Integer.byteValue()
The Integer class has a method to get the byte value of an int.
Integer.byteValue()