我需要返回 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
。使用该类来获取数据是一个实现细节,它并不是真正的操作逻辑结果。 - 如果调用者可能会发现它更容易使用,或者如果您稍后可能想从文件(或网络连接或其他)读取数据,请考虑返回一个
InputStream
;ByteArrayInputStream
适用于当前实现
关于java : Returning stream or resulting bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763834/