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