我正在尝试下载歌曲文件。下面的代码(原始代码,这只是我正在做的一个例子)在Asha 310设备上完美运行。但是,在较新的Asha 501设备上,生成的下载文件比实际文件大小大得多。 如果我使用512缓冲区,则2.455.870字节文件最终下载2.505.215字节,并且它也不加载。使用4096缓冲区,文件大小为3.342.335字节!!
发生这种情况的原因是什么?它在另一部手机上完美运行,而且我使用的是非常合理的缓冲区。
downloadedFile = (FileConnection) Connector.open(saveLocation+"testing.m4a", Connector.READ_WRITE);
if (!downloadedFile.exists()) {
downloadedFile.create();
}
ops = downloadedFile.openOutputStream();
hc = (HttpConnection) Connector.open(url);
hc.setRequestMethod(HttpsConnection.POST);
hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
String postData = "sid=" + session.sid + "&fileid=" + file.getId();
byte[] request_body = postData.getBytes();
DataOutputStream dos = null;
dos = hc.openDataOutputStream();
for (int i = 0; i < request_body.length; i++) {
dos.writeByte(request_body[i]);
}
byte[] buf = new byte[512];
dis = hc.openInputStream();
int downloadSize = 0;
while (dis.read(buf) != -1) {
ops.write(buf, 0, buf.length);
downloadedSize += buf.length;
}
答案 0 :(得分:0)
事实证明缓冲区没有被完全填满,因此未填写的每个缓冲区的其余部分都是垃圾。这解释了为什么当设置更大的缓冲区时,文件更大,因为它有更多的垃圾。
int len;
while((len=dis.read(buf))!=-1)
{
ops.write(buf,0,len);
downloadedSize += len;
}
编辑:它正在使用旧手机,因为它们始终使用实际数据填写整个缓冲区。较新的设备没有。