将OutputStream转换为ByteArrayOutputStream

时间:2014-11-16 19:17:58

标签: java outputstream wave bytearrayoutputstream

我正在尝试将OutputStream转换为ByteArrayOutput信息流。我无法找到关于如何做到这一点的任何明确的简单答案。这个问题在StackOverflow问题的标题中提出,但问题的主体是如何将ByteArrayStream更改为OuputStream。我有一个OutputStream已经创建了,答案中给出的这个例子将无法编译!

That Question is Here

我有一个已经构造的OutputStream,其长度为44字节,称为waveHeader。我想将其转换为ByteArrayOutputStream,因为我希望能够使用waveHeader.ToByteArray()将其更改为byte []以简化后续流程;

是否有简单的铸造类型或允许这样的东西?

如果没有,那么:

  • 有没有办法在原始OutputStream中构造指向数据的指针,如果无法转换它的话?

  • 有人会如何访问OutputStream中包含的数据?

我是JAVA的新手。这对我来说只是一个爱好。流在VisualBasic .net中更容易!

3 个答案:

答案 0 :(得分:23)

有多种可能的情况:

a)你有一个ByteArrayOutputStream,但它被声明为OutputStream。然后你可以做这样的演员:

void doSomething(OutputStream os)
{
    // fails with ClassCastException if it is not a BOS
    ByteArrayOutputStream bos = (ByteArrayOutputStream)os;
...

b)如果你有任何其他类型的输出流,将它转换为BOS并没有意义。 (您通常希望转换它,因为您想要访问结果数组)。因此,在这种情况下,您只需设置一个新流并使用它。

void doSomething(OutputStream os)
{
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bos.write(something);
    bos.close();
    byte[] arr = bos.toByteArray();
    // what do you want to do?
    os.write(arr); // or: bos.writeTo(os);
...

c)如果你已经为任何类型的OutputStream写了一些东西(你不知道它是什么,例如因为你从servlet中获取它),就没有办法得到那些信息。你不能写一些你以后需要的东西。解决方案是答案b)您在自己的流中编写它,然后您可以将数组用于您自己的目的,并将其写入实际的输出流。

请记住ByteArrayOutputStreams将所有数据保存在内存中。

答案 1 :(得分:7)

您可以使用writeTo的{​​{1}}方法。

ByteArrayOutputStream

您可以创建ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] bytes = new bytes[8]; bos.write(bytes); bos.writeTo(oos); 的实例。然后,您需要将数据写入此ByteArrayOutputStream实例,然后使用接受ByteOutputStream的{​​{1}}方法,您可以启用writeTo来写入输出,您作为参数传递的OutputStream实例。

答案 2 :(得分:-1)

你可以在输出流上使用toByteArray函数。那就是说你有outputStream缓冲区所以你可以buffer.toByteArray

如需了解更多信息,请查看Convert InputStream to byte array in Java的答案。