2012-07-23 165 views
4

我从Apache的共享页面引用的Commons FileUpload阿帕奇通用FileUpload “流API”

本页面描述公地的传统API文件上传 库。传统的API是一种方便的方法。但是,对于 的最终性能,您可能更愿意使用更快的 Streaming API。

我的问题

做出什么具体区别Streaming APItraditional API快?

+0

第一个问题太含糊。本身可以使线程关闭。第二个是人们可以真正回答的问题... – Alfabravo 2012-07-27 22:31:10

+0

@Alfabravo现在? – 2012-07-27 22:42:04

+0

现在我正在努力帮助,不知道答案是否涵盖了您的期望,或者您是否在寻找具体问题。 – Alfabravo 2012-07-27 22:56:24

回答

4

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

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

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

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

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

+0

+1,如果文件的大小大于内存的容量会怎样? – 2012-07-28 22:15:44

+0

编辑回答你的问题(试图) – Alfabravo 2012-07-30 01:36:11

0

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

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

+0

这是一个不同的问题,这是没有说明在那里... – Alfabravo 2012-07-27 22:26:08

+0

@Alfabravo我删除了我的评论,即使那么我不认为这个答案是值得任何内部为什么Streaming API比传统的API更快? – 2012-07-27 22:29:16

-1

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

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

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

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

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

0

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