Apache的通用FileUpload“流API”(Apache commons fileuploa

2019-07-30 13:27发布

我从Apache的共享页面引用Commons FileUpload

此页面介绍,通用FileUpload库的传统API。 传统的API是一种方便的方法。 然而,对于最终的性能,您可能希望更快的流API。

我的问题

有什么具体的差异使得Streaming API的速度比traditional API

Answer 1:

关键的区别是在你处理文件,如你自己和工厂类注意到的方式。

流式API是不是在磁盘保存在获取输入流。 最后,你就可以处理文件速度更快(与临时存储成本)......但这个想法是,以避免保存二进制磁盘,除非你真的想/需要。

在此之后,您就可以将数据保存到磁盘,当然,使用的BufferedInputStream,一个字节数组或相似。

编辑:(fileItemStreamElement当你打开流处理程序的OpenStream ())是一种常见的InputStream实例。 所以,回答你的“如果它是一个大文件”是这样的内存问题随同InputStream在Java中

编辑:流API不应该保存到磁盘或保存在内存中。 它只是提供了可以读取到将文件复制到任何你想去的地方流。 这是为了避免一个临时目录,也避免分配足够的内存来存放文件的方式。 这应该至少快是因为它不是从磁盘/存储复制两次,一次从浏览器到磁盘/内存中,然后再在任何你保存它。



Answer 2:

这是用户手册中描述的传统的API,假设,该文件物品必须保存在某个地方,其实都是由用户accessable之前。 这种方法很方便,因为它可以方便地访问一个项目内容。 在另一方面,它是内存和耗时。

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



Answer 3:

流式API不应该保存到磁盘或保存在内存中。 它只是提供了可以读取到将文件复制到任何你想去的地方流。 这是为了避免一个临时目录,也避免分配足够的内存来存放文件的方式。 这应该至少快是因为它不是从磁盘/存储复制两次,一次从浏览器到磁盘/内存中,然后再在任何你保存它。



Answer 4:

流通常指的是API(如Apache文件上传或StAX的),其中数据是从源动态其内容不能精确地预先知道发送并在应用程序运行时解析串联,往往在实时,并且经常。

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

像一个FileHandling API传统方法假定文件物品必须保存在某个地方,其实都是由用户访问之前。 这种方法很方便,因为它可以方便地访问一个项目内容。 在另一方面,它是内存和耗时。

一个流API将有一个更小的内存占用和较小的处理器需求,并可以在某些情况下,更高的性能。

它适用于基本的您正在使用的文件的“纸管”的说法。



文章来源: Apache commons fileupload “Streaming API”