最近在做一个HttpURLConnection上传问题发现上传时,发现上传速度非常快,但是很快内存溢出。
查HttpURLConnection api发现其有缓存机制,数据并没有实时发送到网络,而是先缓存再发送,导致内存溢出。
解决办法:
httpConnection.setChunkedStreamingMode(0);
//不使用HttpURLConnection的缓存机制,直接将流提交到服务器上。
---------------------------------------------------------------------------------------------------------------------------------
1.连接
HttpURLConnection con = (HttpURLConnection)new URL("url").openConnection();
2.设置输出流的固定长度
1)已知输出流的长度用setFixedLengthStreamingMode()
con.setFixedLengthStreamingMode(输出流的固定长度)
2)位置输出流的长度用setChunkedStreamingMode()
con.setChunkedStreamingMode(块的大小);
如果没有用到以上两种方式,则会在本地缓存后一次输出,那么当向输出流写入超过40M的大文件时会导致OutOfMemory
3,其他设置
con.setTimeout()
con.setRequestMethod()
con.setDoOutput()
con.setReadTimeout()
con.setRequestProperty()
con.connect()