Java ApacheCommonsFileUpload“;流媒体API“;

Java ApacheCommonsFileUpload“;流媒体API“;,java,file-upload,apache-commons,Java,File Upload,Apache Commons,我引用apachecommons页面的Commons文件上传 本页介绍commons fileupload的传统API 图书馆。传统的API是一种方便的方法。然而,对于 最终性能,您可能更喜欢更快的流式API 我的问题 与传统API相比,流式API有哪些具体差异 《用户指南》中描述的传统API假定,文件项必须存储在某个位置,然后用户才能实际访问它们。这种方法很方便,因为它允许轻松访问项目内容。另一方面,它是内存和时间消耗 关键区别在于处理文件的方式,正如您自己在factory类中注意到的那样 获

我引用apachecommons页面的
Commons文件上传

本页介绍commons fileupload的传统API 图书馆。传统的API是一种方便的方法。然而,对于 最终性能,您可能更喜欢更快的流式API

我的问题

与传统API相比,
流式API
有哪些具体差异

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


关键区别在于处理文件的方式,正如您自己在factory类中注意到的那样

获取输入流时,流式API未保存在磁盘中。最终,您将能够更快地处理该文件(以临时内存为代价)。。。但这样做的目的是避免将二进制文件保存在磁盘中,除非您真的想/需要这样做

之后,当然,您可以使用bufferedinputstream、字节数组或类似工具将数据保存到磁盘

编辑:打开流(fileItemStreamElement.()时的处理程序是一个公共InputStream实例。所以,你的“如果是一个大文件怎么办”的答案是这样的


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

流媒体通常指的是一种API(如Apache FileUpload或StAX),其中数据在应用程序运行时串行传输和解析,通常是实时的,而且通常来自动态来源,其内容事先并不确切

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

与文件处理API类似,传统方法假定文件项必须存储在某个位置,然后用户才能实际访问它们。这种方法很方便,因为它允许轻松访问项目内容。另一方面,它是内存和时间消耗

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


它的工作原理是您正在处理的文档的“硬纸板管”视图。

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

@Alfabravo我删除了我的评论,即使这样,我认为这个答案不值得深入了解为什么流式API比传统API快?第一个问题太模糊了。它本身可以使线程闭合。第二个问题是人们可以真正回答的问题……现在我正试图提供帮助,不知道答案是否符合您的期望,或者您正在寻找特定的问题。+1,如果文件大小大于内存容量,该怎么办?编辑以回答您的问题(尝试)