下载大小大于可用流/文件大小。 (Asha 501,J2ME)

时间:2013-12-27 15:24:37

标签: java http java-me download

我正在尝试下载歌曲文件。下面的代码(原始代码,这只是我正在做的一个例子)在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;            

    }

1 个答案:

答案 0 :(得分:0)

事实证明缓冲区没有被完全填满,因此未填写的每个缓冲区的其余部分都是垃圾。这解释了为什么当设置更大的缓冲区时,文件更大,因为它有更多的垃圾。

http://developer.nokia.com/Community/Discussion/showthread.php/244179-Download-size-larger-than-available-stream-file-size-(Asha-501)

int len;
while((len=dis.read(buf))!=-1)
{
    ops.write(buf,0,len);
    downloadedSize += len;
}

编辑:它正在使用旧手机,因为它们始终使用实际数据填写整个缓冲区。较新的设备没有。