【问题标题】:FileBackedOutputStream use case (Guava)FileBackedOutputStream 用例(番石榴)
【发布时间】:2011-01-27 13:56:06
【问题描述】:

我遇到了来自Google Guava 库的FileBackedOutputStream 类,想知道它是否适合用作一种缓冲区:每天一次,我的webapp 中的一个进程会生成数万行(每行包含大约100 个字符)然后上传到 FTP 服务器上的文件。我正在考虑使用FileBackedOutputStream 对象首先将所有这些字符串写入,然后使用FileBackedOutputStream.getSupplier().getInput() 向我的FTP 客户端授予对它们的访问权限,这将返回InputStream。这是FileBackedOutputStream 的正确用例吗?

【问题讨论】:

  • 如果你想要一个 InputStream,为什么不使用一个 ByteArrayOutputStream 和一个 ByteArrayInputStream 呢?它可能更简单、更高效。
  • 是否也适用于我提到的大小数据,即数万行(字符串),每行约100个字符?
  • 它是线程安全的,这在使用 I/O 资源时很重要。试一试
  • 试试 ByteArrayOutputStream 或 FileBackedOutputStream?
  • Peter:BAOS 的效率稍高一些,但 FileBackedOutputStream 是为提高效率而设计的:[它] 开始缓冲到字节数组,但一旦数据达到可配置的大小,就会切换到文件缓冲。因此,您可以获得两全其美:小数据的内存速度和大容量。

标签: java ftp iostream guava java-io


【解决方案1】:

是的,我认为这对于FileBackedOutputStream 来说是一个可以接受的用例。但是,我认为FileBackedOutputStream 是最好的,当您将它与大小可能有很大差异的数据一起使用时......对于可以放入内存而没有问题的少量数据,您只想将它​​们缓冲在内存中如果您尝试将其全部读入内存,可能会给您一个OutOfMemoryError 的数据量,您想切换到缓冲到文件。我认为这就是FileBackedOutputStream 真正闪耀的地方。我用它来缓冲上传的文件,我需要做几件事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多