java : Returning stream or resulting bytes

标签 java java-io

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

我应该使用哪一个?

举例说明:

方法一

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;
    }

最佳答案

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

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

如果您确实想要返回流,那很简单:

return new ByteArrayInputStream(baos.toByteArray());

总结一下:

  • 不要返回ByteArrayOutputStream。使用该类来获取数据是一个实现细节,它并不是真正的操作逻辑结果。
  • 如果调用者可能会发现它更容易使用,或者如果您稍后可能想从文件(或网络连接或其他)读取数据,请考虑返回一个InputStreamByteArrayInputStream 适用于当前实现

关于java : Returning stream or resulting bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763834/

相关文章:

java - 在文件中写入和读取混合数据

java - Collectors.groupingBy 具有自定义键名称

java - 代号 一个存储错误值的 SQL 数据库

java : list that contains unique elements in order

java - 文件写入 : String to Bytes

java - 无效类异常

java - 如何在多个java类中自动修改代码?

java - 无法使用 jpa 在应用程序引擎上保留实体

java - 如果帧大小> 1,则Java AudioInputStream IOException无法读取单个字节

java - 如何添加文件找不到此代码的异常(exception)?