Apache commons fileupload“Streaming API”

时间:2012-07-23 21:00:11

标签: java file-upload apache-commons

我引用了Commons FileUpload

的Apache Commons页面
  

此页面描述了commons fileupload的传统API   图书馆。传统的API是一种方便的方法。但是,对于   最终性能,您可能更喜欢更快 Streaming API。

我的问题

哪些具体差异使Streaming APItraditional API更快?

4 个答案:

答案 0 :(得分:4)

关键区别在于您处理文件的方式,就像您自己注意到工厂类一样。

获取输入流时,流API不会保存在磁盘中。最后,您将能够更快地处理文件(临时内存的成本)......但我们的想法是避免将二进制文件保存在磁盘中,除非您真的需要/需要。

之后,您可以使用缓冲输入流,字节数组或类似方法将数据保存到磁盘。

编辑:打开流时的处理程序(fileItemStreamElement。openStream())是一个常见的InputStream实例。所以,你的“如果它是一个大文件”的答案是这样的Memory issues with InputStream in Java

编辑:流API不应保存到磁盘或保存在内存中。它只是提供了一个可以读取的流,可以将文件复制到任何您想要的位置。这是一种避免使用临时目录并避免分配足够内存来保存文件的方法。这应该更快,至少因为它没有被复制两次,一次从浏览器复制到磁盘/内存,然后再从磁盘/内存复制到你保存的地方。

答案 1 :(得分:0)

  

“用户指南”中描述的传统API假定文件项必须存储在某个位置,然后才能由用户实际访问。这种方法很方便,因为它可以轻松访问项目内容。另一方面,它是内存和耗时。

http://commons.apache.org/fileupload/streaming.html

答案 2 :(得分:0)

流API不应保存到磁盘或保存在内存中。它只是提供了一个可以读取的流,可以将文件复制到任何您想要的位置。这是一种避免使用临时目录并避免分配足够内存来保存文件的方法。这应该更快,至少因为它没有被复制两次,一次从浏览器复制到磁盘/内存,然后再从磁盘/内存复制到你保存的地方。

答案 3 :(得分:-1)

流通常是指API(如Apache FileUpload或StAX),其中数据在应用程序运行时通常是实时传输和解析,并且通常来自事先未准确知道其内容的动态源。

传统模型指的是(传统文件处理API,DOM API)等API,它们提供了有关数据的更多详细信息。

与FileHandling API类似传统方法假定文件项必须存储在某个地方,然后才能由用户实际访问。这种方法很方便,因为它可以轻松访问项目内容。另一方面,它耗费内存和时间。

Streaming API将具有更小的内存占用和更小的处理器要求,并且在某些情况下可以具有更高的性能。

它适用于您正在使用的文档的“纸管”视图的基础。