这是我正在做的一些快速代码。(我删除了其中的一些以使其更具可读性。)本质上,我正在打开一个文件,一次处理 3k 块。这些被编码为 Base64(现在是 4k 块)并通过 HTTP post 上传。每次调用 DataOutputStream.writeBytes() 后,我还会调用 DataOutputStream.flush(),然后根据发送的数量更新进度条。
File myImage = new File(somepath);
int bytesAvailable = myImage.length();
while (bytesAvailable > 0)
{
byte[] buffer = new byte[Math.min(12288, (int)bytesAvailable)];
bytesRead = fileInputStream.read(buffer, 0, Math.min(12288, (int)bytesAvailable));
if (bytesRead > 0)
{
s2 = Base64.encodeBytes(buffer);
bytesAvailable = fileInputStream.available();
dataStream.writeBytes(s2);
dataStream.flush();
// UPDATE THE PROGRESS BAR HERE
}
}
现在,当我运行应用程序时,每次都成功上传图像。但是,如果我查看移动连接指示器(向上/向下箭头),它们不会在进度条移动时亮起。对于 3MB 图像(对于我的 3G 手机来说太快了),该条将在 10 秒左右的时间内从 0 变为 100%。然后在 100% 完成此循环后,调用 dataStream.close() 方法。这是数据传输开始的时间(如箭头所示)。这会在完成前等待几分钟。
我不正确理解 flush() 吗?它不应该强制传输数据吗?