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

时间:2013-04-15 17:12:32

标签: 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();

1 个答案:

答案 0 :(得分:0)

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

此外,lastMsgTimeStamp没有声明,是否在您的示例之外的某处设置为System.currentTimeMillis()

在任何一种情况下,OutputSteamWriter以及java.io.*包的其余部分都会被阻止。因此,当调用write时,您的线程会停止直到它完成。但是,StreamEncoder中的OutputStreamWriter以及OutputStream返回的URLConnection的实施都会进行一些缓冲。既没有缓冲这么大量的数据,所以你的问题很可能就在其他地方。