我发现自己在我的应用程序模块周围传递了InputStream / OutputStream对象。
我想知道是否更好 - 将内容保存到磁盘并在各种方法调用之间传递类似Resource的内容 - 使用byte [] array
而不是每次都要处理流。
在这些情况下你的方法是什么?
谢谢
修改
我有一个Controller,它接收用户上传的文件。我有一个实用程序模块,它提供了一些渲染文件的功能。
utilityMethod(InputStream is, OutputStream os)
InputStream中的文件是用户上传的文件。 os是与响应关联的流。我想知道是否最好使用实用程序方法将生成的文件保存在.tmp文件中并返回文件路径或byte []等,并让控制器直接处理outputStream。
答案 0 :(得分:1)
我尽量保持RAM尽可能多(主要是因为性能原因和RAM很便宜)。所以我使用FileBackedBuffer
来“保存”未知大小的数据。它有一个限制。当写入少于limit
个字节时,它会将它们保存在内部缓冲区中。如果写入更多数据,我将创建实际文件。这个类有方法从中获取InputStream
和OutputStream
,因此使用代码不会受到细节的影响。
答案 1 :(得分:0)
答案实际上取决于问题的背景,我们不知道。
因此,想象最通用的情况,我会创建两个抽象。第一个抽象将InputStream/OutputStream
作为参数,而另一个将采用byte[].
获取流的那个可以读取数据并将其传递给byte []实现。所以现在你的用户可以根据他们的需求/舒适度使用流抽象和byte []抽象。