Java FileBackedOutputStream用例(番石榴)

Java FileBackedOutputStream用例(番石榴),java,ftp,iostream,guava,java-io,Java,Ftp,Iostream,Guava,Java Io,我在Google Guava库中遇到了FileBackedOutputStream类,想知道它是否适合用作缓冲区:我的webapp中的一个进程每天生成数万行(每行包含大约100个字符),然后上传到FTP服务器上的文件中。我正在考虑使用FileBackedOutputStream对象,首先将所有这些字符串写入,然后通过使用FileBackedOutputStream.getSupplier().getInput()将它们访问给我的FTP客户机,它返回一个InputStream。这是FileBack

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

是的,我认为这是
FileBackedOutputStream
可以接受的用例。但是,我认为当您使用它处理大小可能有很大差异的数据时,
FileBackedOutputStream
是最好的。。。对于可以毫无问题地放入内存的少量数据,您只想将其缓冲在内存中,但对于可能会导致
OutOfMemoryError
的大量数据,如果您尝试将其全部读入内存,则需要切换到缓冲到文件。我认为这就是
FileBackedOutputStream
真正闪耀的地方。我用它来缓冲上传的文件,我需要用这些文件做一些事情。

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