Java利用commons-fileupload进行文件上传中设置缓冲区和临时文件什么意思?请高手扫一下盲
这个组件有几个类:DiskFileItemFactory()DiskFileItemFactory(intsizeThreshold,java.io.Filereposi...
这个组件有几个类:
DiskFileItemFactory()
DiskFileItemFactory(int sizeThreshold, java.io.File repository)
int sizeThreshold -- 设置缓冲区的大小,如果不设置,默认值是10KB
*
java.io.File repository -- 设置临时文件的存储目录,如果上传的文件的大小,超过了设置缓冲区大小,产生临时文件。
我的疑问是为什么上传的文件超过了缓冲区的大小,就产生临时文件?听它的这口气貌似是这个Apache的这个文件上传组件是个急性子,我不管装不装得下,我只抓(指读取浏览器请求体的文件字节流)一次,所以如果没超过缓冲区,就over了,如果超过了缓冲区,也无所谓,超出的部分被“漏”到了硬盘上的临时文件里,待会再处理它。
为什么这样,第一次读10kb,第二次再读第二个10kb,第三次再读第三个10kb...,就像我们平时helloworld里写的复制文件一样不行吗?还有这里的缓冲区是什么概念呀,平时写的复制文件不就是一个输入流,一个输出流,然后读写读写读写吗,也没有缓冲区的概念呀,请高手为我解惑 展开
DiskFileItemFactory()
DiskFileItemFactory(int sizeThreshold, java.io.File repository)
int sizeThreshold -- 设置缓冲区的大小,如果不设置,默认值是10KB
*
java.io.File repository -- 设置临时文件的存储目录,如果上传的文件的大小,超过了设置缓冲区大小,产生临时文件。
我的疑问是为什么上传的文件超过了缓冲区的大小,就产生临时文件?听它的这口气貌似是这个Apache的这个文件上传组件是个急性子,我不管装不装得下,我只抓(指读取浏览器请求体的文件字节流)一次,所以如果没超过缓冲区,就over了,如果超过了缓冲区,也无所谓,超出的部分被“漏”到了硬盘上的临时文件里,待会再处理它。
为什么这样,第一次读10kb,第二次再读第二个10kb,第三次再读第三个10kb...,就像我们平时helloworld里写的复制文件一样不行吗?还有这里的缓冲区是什么概念呀,平时写的复制文件不就是一个输入流,一个输出流,然后读写读写读写吗,也没有缓冲区的概念呀,请高手为我解惑 展开
1个回答
2015-07-14 · 知道合伙人软件行家
关注
展开全部
我看到你的问题写了这么一长串,就想呵呵了
你平时读写文件不是要用个byte来读取,其实这个byte数组也算是个缓冲区,只是你的缓冲区比较少,通常搞个1024
这里的意思是, 如果你上传了一个文件,只有5kb,那么他不会生成文件,直接保存在内存中,给你处理
但是当你超过了这个缓冲区,它就会生成一个临时文件再处理
还有哪里不明白?
你平时读写文件不是要用个byte来读取,其实这个byte数组也算是个缓冲区,只是你的缓冲区比较少,通常搞个1024
这里的意思是, 如果你上传了一个文件,只有5kb,那么他不会生成文件,直接保存在内存中,给你处理
但是当你超过了这个缓冲区,它就会生成一个临时文件再处理
还有哪里不明白?
更多追问追答
追问
比如缓冲区1024kb,超过了缓冲区,现将缓冲区的1024写到目的文件中,接下来再往缓冲区中放1024,这样到头来,也可以不用那个临时文件呀,Apache搞个临时文件有什么意义呢,servlet3.0可以支持文件上传,就没有临时文件,
追答
如果上传的文件小就不会产生临时文件,这是速度快
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询