java:返回流或结果字节

时间:2015-04-21 05:41:08

标签: java java-io

我需要从被调用的方法返回ByteArrayOutputStream的字节数组。我看到两种方法可以达到同样的目的:首先回归ByteArrayOutputStream&使用toByteArray()方法,然后使用baos.toByteArray()并返回字节数组。

我应该使用哪一个?

举例说明:

方法1

void parentMethod(){
        bytes [] result = process();
    }
    void byte[] process(){
        ByteArrayOutputStream baos;
        .....
        .....
        .....
        baos.toByteArray();
    }

方法2

void parentMethod(){
        ByteArrayOutputStream baos = process();     
    }
    void ByteArrayOutputStream process(){
        ByteArrayOutputStream baos;
        .....
        .....
        .....
        return baos;
    }

1 个答案:

答案 0 :(得分:3)

还有另一种选择:返回InputStream。据推测,这个想法是您返回操作产生的数据。因此,返回输出流对我来说似乎很奇怪。要返回数据,您通常要么返回原始byte[],要么将InputStream包裹起来 - 后者更灵活,因为它可以从文件或类似内容中读取,但是要求呼叫者在之后关闭流。

这在一定程度上取决于呼叫者想要对数据做什么 - 如果你已经有了一个流,有些操作更容易执行;还有其他一些字节数组更容易。我会让这个决定影响很多。

如果你想要返回一个流,那很容易:

return new ByteArrayInputStream(baos.toByteArray());

总结一下:

  • 不要返回ByteArrayOutputStream。使用该类来提供数据是一个实现细节,并不是操作的逻辑结果。
  • 如果调用者可能会发现更容易使用,或者您以后想要从文件(或网络连接等)读取数据,请考虑返回InputStream; ByteArrayInputStream适用于当前的实施