我正在为一个服务的客户机设计API,该服务将数据作为字节流进行检索。
InputStream getData(String param1, String param2);
字符串
超过
byte[] getData(String param1, String param2);
型
返回inputstream的方法让我很困扰,因为
1.现在我的代码必须依赖外部代码来关闭inputstream。我知道最好的做法是只关闭那些你打开的资源,所以这似乎是错误的。
1.输入流是不可重复的。一旦我的代码的客户端读取流,字节就会丢失
1.在我的实现中,流实际上是通过网络(套接字)的。当我使用连接池并监视它以摆脱过期的连接等时,我觉得能够关闭我自己打开的资源可能会更好。
最好的设计方法是什么?我甚至考虑过用
void writeData(String param, String param, OutputStream os);
型
但这使得方法名称不直观。
2条答案
按热度按时间a1o7rhls1#
byte[]有两个可能的缺点:
使用流可以解决这些问题,这取决于你返回什么数据以及你希望用户用它做什么。
shstlldc2#
我会返回类似于Guava的
InputSupplier<InputStream>
,它允许您请求多个不同的输入流。此外,Guava提供了许多方法,这些方法采用
InputSupplier<InputStream>
,打开输入流,执行一些完整的流操作,然后关闭它,而不会让您记住关闭输入流或其他东西。即使您不想直接使用Guava,这也是一种很好的技术,可以让客户端程序决定如何处理它。