我从Apache的共享页面引用的Commons FileUpload
阿帕奇通用FileUpload “流API”
本页面描述公地的传统API文件上传 库。传统的API是一种方便的方法。但是,对于 的最终性能,您可能更愿意使用更快的 Streaming API。
我的问题
做出什么具体区别Streaming API
比traditional API
快?
我从Apache的共享页面引用的Commons FileUpload
阿帕奇通用FileUpload “流API”
本页面描述公地的传统API文件上传 库。传统的API是一种方便的方法。但是,对于 的最终性能,您可能更愿意使用更快的 Streaming API。
我的问题
做出什么具体区别Streaming API
比traditional API
快?
的主要区别是在你处理文件,如你自己和工厂类注意到的方式。
在获取输入流时,流式API不保存在磁盘中。最后,你将能够更快地处理文件(在临时内存上花费)......但是想法是避免将二进制文件保存在磁盘中,除非你真的想/需要。
之后,您可以将数据保存到磁盘,当然,使用bufferedinputstream,字节数组或类似的。
编辑:处理程序,当您打开流(fileItemStreamElement。openStream())是一个常见的InputStream实例。所以,你的“如果它是一个大文件”的答案是这样的Memory issues with InputStream in Java
编辑:流API不应该保存到磁盘或保存在内存中。它只是提供一个可以读取的流,将文件复制到任何你想要的位置。这是避免拥有临时目录并避免分配足够内存来保存文件的一种方法。这应该会更快,至少因为它不会被复制两次,一次从浏览器到磁盘/内存,然后从磁盘/内存再次被复制到任何您保存的位置。
+1,如果文件的大小大于内存的容量会怎样? – 2012-07-28 22:15:44
编辑回答你的问题(试图) – Alfabravo 2012-07-30 01:36:11
用户指南中描述的传统API假定文件项必须存储在某处,然后才能由用户实际访问。这种方法很方便,因为它可以方便地访问项目内容。另一方面,这是记忆和耗时的。
这是一个不同的问题,这是没有说明在那里... – Alfabravo 2012-07-27 22:26:08
@Alfabravo我删除了我的评论,即使那么我不认为这个答案是值得任何内部为什么Streaming API比传统的API更快? – 2012-07-27 22:29:16
流式传输通常指的是API(如Apache FileUpload或StAX),其中数据在应用程序运行时经常实时传输和分析,并且通常来自其内容事先未精确知道的动态源。
传统模型指API(如传统文件处理API,DOM API),它提供了有关数据的更多详细信息。
与FileHandling API类似传统方法假定文件项必须存储在某处,然后才能由用户实际访问。这种方法很方便,因为它可以方便地访问项目内容。另一方面,这是记忆和耗时的。
Streaming API将具有更小的内存占用空间和更小的处理器要求,并且在某些情况下可以具有更高的性能。
它适用于您正在使用的文档的“纸板管”视图的基础。
流API不应保存到磁盘或保存在内存中。它只是提供一个可以读取的流,将文件复制到任何你想要的位置。这是避免拥有临时目录并避免分配足够内存来保存文件的一种方法。这应该会更快,至少因为它不会被复制两次,一次从浏览器到磁盘/内存,然后从磁盘/内存再次被复制到任何您保存的位置。
第一个问题太含糊。本身可以使线程关闭。第二个是人们可以真正回答的问题... – Alfabravo 2012-07-27 22:31:10
@Alfabravo现在? – 2012-07-27 22:42:04
现在我正在努力帮助,不知道答案是否涵盖了您的期望,或者您是否在寻找具体问题。 – Alfabravo 2012-07-27 22:56:24