如何监控HttpURLConnection发送的数据大小?

NSF*_*NSF 5 java post httpurlconnection

我试图显示已经发送的数据的大小,OutputStreamWriter但似乎write方法有点像异步,这意味着如果文件是 60M 并且上传速率是 200K/s,输出只显示一行“数据发送:61210K "(或任何大数字)而不是应该是什么(每秒一个小数字)

我错过了什么?

代码段:

Writer writer = new OutputStreamWriter(out, POST_ENCODING);
char[] buf = new char[1024];
int read = 0;
long bytes = 0;
while ((read = reader.read(buf)) >= 0) {
    bytes += read;
    if (System.currentTimeMillis() - lastMsgTimeStamp > 1000) {
        lastMsgTimeStamp = System.currentTimeMillis();
        System.out.println("Data sent: " + (bytes / 1024) + " K");
    }
    writer.write(buf, 0, read);
}
writer.flush();
Run Code Online (Sandbox Code Playgroud)

小智 0

假设readerInputStreamReader,您正在跟踪正在读取/发送的字符数,而不是字节数。如果您实际上并未在读/写之间处理文本,那么您可以使用标准InputStream/OutputStream来监视字节数。

另外,lastMsgTimeStamp没有声明,它是否被设置到System.currentTimeMillis()示例之外的某个位置?

无论哪种情况,OutputSteamWriter以及java.io.*包的其余部分都会阻塞。因此,当write调用时,您的线程将停止直到完成。StreamEncoder然而,由in以及由返回OutputStreamWriter的 实现进行了一些缓冲。两者都不会缓冲如此大量的数据,因此您的问题可能出在其他地方。OutputStreamURLConnection