HttpURLConnection上传大文件内存溢出的原因及解决办法

原因:

由于HttpURLConnection默认是有缓存机制的,在对文件操作时,会将读取的数据写入到缓存区中,并不是直接写入到服务器上,只有当流被关闭时,才将数据提交到服务器上。当缓存区的数据大于虚拟机给点的内存时,就导致内存溢出。

HttpURLConnection设置固定缓存长度的代码:


HttpURLConnection设置缓存模式的代码:


解决办法:

conn.setChunkedStreamingMode(0);设置该选项,则不使用HttpURLConnection的缓存机制,直接将流提交到服务器上。