我试图显示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();
答案 0 :(得分:0)
假设reader
为InputStreamReader
,您正在跟踪正在读取/发送的字符数,而不是字节数。如果您实际上没有在读/写之间处理文本,那么您可以使用标准InputStream
/ OutputStream
来监视字节数。
此外,lastMsgTimeStamp
没有声明,是否在您的示例之外的某处设置为System.currentTimeMillis()
?
在任何一种情况下,OutputSteamWriter
以及java.io.*
包的其余部分都会被阻止。因此,当调用write
时,您的线程会停止直到它完成。但是,StreamEncoder
中的OutputStreamWriter
以及OutputStream
返回的URLConnection
的实施都会进行一些缓冲。既没有缓冲这么大量的数据,所以你的问题很可能就在其他地方。