【问题标题】:Java Project Modules - use InputStream/OutputStream or .tmpFile/byte[]Java 项目模块 - 使用 InputStream/OutputStream 或 .tmpFile/byte[]
【发布时间】:2010-12-17 02:21:44
【问题描述】:

我发现自己在我的应用程序模块周围传递 InputStream/OutputStream 对象。

我想知道是否更好
- 将内容保存到磁盘并在各种方法调用之间传递类似 Resource 的东西
- 使用 byte[] 数组
而不是必须每次处理流。

在这些情况下您的方法是什么?
谢谢

编辑:
我有一个控制器,它接收用户上传的文件。我有一个实用模块,它提供了一些渲染文件的功能。

utilityMethod(InputStream is, OutputStream os)

InputStream中的文件是用户上传的文件。 os 是与响应关联的流。我想知道是否最好使用实用程序方法将生成的文件保存在 .tmp 文件中并返回文件路径或字节 [] 等,并让控制器直接处理 outputStream。

【问题讨论】:

  • 您将流用于什么,实际类型是什么?

标签: bytearray resources inputstream temporary-files outputstream


【解决方案1】:

我尝试尽可能多地保存在 RAM 中(主要是因为性能原因并且 RAM 很便宜)。所以我使用FileBackedBuffer 来“保存”未知大小的数据。它有一个限制。当写入的字节数少于limit 时,它会将它们保存在内部缓冲区中。如果写入更多数据,我将创建实际文件。此类具有从中获取InputStream 和OutputStream 的方法,因此使用代码不会受到琐碎细节的困扰。

【讨论】:

    【解决方案2】:

    答案实际上取决于问题的上下文,我们不知道。

    因此,想象一下最通用的情况,我将创建两个抽象。第一个抽象将采用InputStream/OutputStream 作为参数,而另一个抽象将采用byte[]. 接受流的那个可以读取数据并将其传递给 byte[] 实现。因此,现在您的用户可以根据自己的需要/舒适度同时使用流抽象和 byte[] 抽象。

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 2013-04-25
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多