java :返回流或结果字节

java : Returning stream or resulting bytes

我需要 return 来自被调用方法的 ByteArrayOutputStream 的字节数组。我看到有两种方法可以实现同一件事:首先使用 return ByteArrayOutputStream 并使用 toByteArray() 方法,其次使用 baos.toByteArray() 和 return 字节数组。

我应该使用哪一个?

举例说明:

方法一

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

方法二

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

还有另一种选择:return 和 InputStream。这个想法大概是您正在 returning 操作产生的数据。因此,returning 一个 output 流对我来说似乎很奇怪。对于 return 数据,您通常会 return 原始 byte[]InputStream 包装它 - 后者更灵活,因为它可以从文件中读取或类似的东西,但确实需要调用者之后关闭流。

这在一定程度上也取决于调用者想对数据做什么 - 如果您已经有了流,有些操作更容易执行;还有其他一些使用字节数组更容易。我会让这对决定产生很大影响。

如果您想要return一个流,那很简单:

return new ByteArrayInputStream(baos.toByteArray());

总结一下:

  • 不要returnByteArrayOutputStream。 class 在得出数据时的使用是一个实现细节,并不是操作的真正逻辑结果。
  • 考虑 returning InputStream 如果呼叫者可能会发现它更容易使用,或者如果您以后可能想从文件(或网络连接,或其他)读取数据; ByteArrayInputStream 适用于当前实现