HttpUrlConnection.setChunkedStreamingMode的效果

Tom*_*Tom 5 java apache-httpclient-4.x

我对此没有很好的了解HttpUrlConnection.setChunkedStreamingMode,此模式的作用是什么?

我有以下示例代码:

HttpURLConnection conn = getHttpURLConnection(_url);
conn.setChunkedStreamingMode(4096); //4k
conn.setConnectTimeout(3000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream out = conn.getOutputStream();
byte[] buffer = new byte[1024 * 10];//10k
FileInputStream in= new FileInputStream(file); //Write the content of the file to the server
int len;
while ((len = in.read(buffer)) != -1) {
    out.write(buffer, 0, len);
}

out.flush();
in.close();
Run Code Online (Sandbox Code Playgroud)

说,文件大小为101k,我将块大小设置为4096。

  1. 每次写入时,HttpUrlConnection会向服务器发送4096字节吗?最后一次是1k?

  2. 请注意,我已经使用了10k缓冲区写入输出流,块大小和缓冲区大小不同是否重要?

  3. 如果我在代码中禁用ChunkedStreamMode,与设置4096的代码相比有什么效果?

use*_*421 5

  1. HttpUrlConnection 每次写入都会向服务器发送 4096 个字节?最后一次1k?

是的。

  1. 请注意,我使用了 10k 缓冲区写入输出流,块大小和缓冲区大小不同是否重要?

不。

  1. 如果我在我的代码中禁用了 ChunkedStreamMode,与我设置 4096 的代码相比,效果如何?

效果是整个输出都被缓冲直到你关闭,这样就可以先设置和发送 Content-length 头,这会增加很多延迟和内存。不推荐在大文件的情况下。