java:返回流或结果字节
我需要从调用的方法返回java:返回流或结果字节,java,java-io,Java,Java Io,我需要从调用的方法返回ByteArrayOutputStream的字节数组。我认为有两种方法可以实现同样的效果:首先使用baos.tobytearrayoutputstream返回usetoByteArray()方法,然后使用baos.toByteArray()返回字节数组 我应该用哪一个 举例说明: 方法1 void parentMethod(){ bytes [] result = process(); } void byte[] process(){
ByteArrayOutputStream
的字节数组。我认为有两种方法可以实现同样的效果:首先使用baos.tobytearrayoutputstream
返回usetoByteArray()
方法,然后使用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;
}
还有另一种选择:返回InputStream
。这个想法可能是您正在返回操作产生的数据。因此,返回输出流对我来说似乎很奇怪。要返回数据,您通常要么返回原始的字节[]
,要么使用InputStream
对其进行包装-后者更灵活,因为它可以从文件或类似的内容中读取,但需要调用方在之后关闭流
这在一定程度上也取决于调用者想要对数据做什么——如果您已经有了流,那么有些操作更容易执行;还有一些更容易使用字节数组的方法。我会让这对决定产生很大影响
如果确实要返回流,这很简单:
return new ByteArrayInputStream(baos.toByteArray());
因此,总结一下:
- 不要通过tearrayoutputstream返回
。在生成数据时使用该类是一个实现细节,它实际上不是操作的逻辑结果
- 如果调用者可能会发现一个
InputStream
更易于使用,或者您以后可能想从文件(或网络连接,或其他)读取数据,请考虑返回该数据流ByteArrayInputStream
适用于当前实现
还有另一种选择:返回InputStream
。这个想法可能是您正在返回操作产生的数据。因此,返回输出流对我来说似乎很奇怪。要返回数据,您通常要么返回原始的字节[]
,要么使用InputStream
对其进行包装-后者更灵活,因为它可以从文件或类似的内容中读取,但需要调用方在之后关闭流
这在一定程度上也取决于调用者想要对数据做什么——如果您已经有了流,那么有些操作更容易执行;还有一些更容易使用字节数组的方法。我会让这对决定产生很大影响
如果确实要返回流,这很简单:
return new ByteArrayInputStream(baos.toByteArray());
因此,总结一下:
- 不要通过tearrayoutputstream返回
。在生成数据时使用该类是一个实现细节,它实际上不是操作的逻辑结果
- 如果调用者可能会发现一个
InputStream
更易于使用,或者您以后可能想从文件(或网络连接,或其他)读取数据,请考虑返回该数据流ByteArrayInputStream
适用于当前实现
如果parentMethod()
不需要关心它是如何获得字节的,那么返回byte[]
似乎更好。如果parentMethod()
不需要关心它是如何获得字节的,那么返回byte[]
似乎更好。