Apache commons fileupload“Streaming API”

我引用了Commons FileUpload Apache Commons页面

该页面描述了commons文件上载库的传统API。 传统的API是一种方便的方法。 但是,为了获得最佳性能,您可能更喜欢速度更快的 Streaming API。

我的问题

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

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

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

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

编辑:打开流时的处理程序( fileItemStreamElement.openStream ())是一个常见的InputStream实例。 所以,你的“如果它是一个大文件”的答案就像这样的内存问题与Java中的InputStream

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

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

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

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

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

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

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

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

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