当前位置: 首页 > 知识库问答 >
问题:

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

夏侯楷
2023-03-14

我正在下载一个歌曲文件。下面的代码(好吧,原始代码,这只是我正在做的一个示例)在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个答案

戚英逸
2023-03-14

结果表明,缓冲区没有被完全填满,所以每个缓冲区中未填满的部分都是垃圾。这就解释了为什么当设置了更大的缓冲区时,文件会更大,因为它有更多的垃圾。

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;
}

编辑:它在老式手机上工作,因为它们一直用实际数据填充整个缓冲区。新的设备没有。

 类似资料:
  • 问题内容: 我正在从远程位置下载文件,对于较小的文件,下载已完成;对于较大的文件(> 10 MB),下载未完成。这是我用于从远程服务器下载文件的代码。 问题答案: 您可以使用apache commons IO库。这很容易。我已经在许多项目中使用过它。

  • 问题内容: 基本上,我想确定是否应该使用AJAX下载文件,具体取决于文件大小。 我猜这个问题也可以表述为:我如何仅获取ajax请求的标头? 编辑 :评论中的ultima-rat0告诉了我两个已经被问到的显然与这个相同的问题。它们非常相似,但是都需要jQuery。我想要一个非jQuery解决方案。 问题答案: 您可以手动获取XHR响应头数据: http://www.w3.org/TR/XMLHttp

  • 我正在下载PDF文件从服务器使用骆驼SFTP组件。有时它是下载零大小的文件。但实际大小为4KB。我认为camel正在下载文件,而文件正在编写。请让我知道如何下载文件后,文件写入操作完成。举个例子。

  • 我在两个不同的服务器上使用这个脚本: 这些服务器具有相同的PHP版本和相同的PHP Curl版本。以下是curl结果的两个不同标题: 工作一: HTTP/1.1 302查找日期:2012年6月12日星期二07:04:35 GMT服务器:Apache/2.2.16(Debian)X-Powered-By:PHP/5.3.3-7 squeeze13过期时间:1981年11月19日星期四08:52:00

  • 问题内容: 以下代码是我编写的PHP Web服务的一部分。它需要一些上载的Base64数据,对其进行解码,然后将其附加到文件中。这一切都很好。 问题是,当我在追加操作之后读取文件大小时,会得到文件在追加操作之前的大小。 我究竟做错了什么? 系统是: PHP 5.2.14 阿帕奇2.2.16 Linux内核2.6.18 问题答案: 在基于Linux的系统上,提取的数据是“ statcached”。

  • 问题内容: 有没有一种方法可以获取远程文件http://my_url/my_file.txt的大小而无需下载文件? 问题答案: 在这里找到有关此的一些信息: 这是(我发现)获取远程文件大小的最佳方法。请注意,HEAD请求不会获取请求的实际主体,它们只是检索标头。因此,对100MB的资源进行HEAD请求所花费的时间与对1KB的资源进行HEAD请求所花费的时间相同。 用法: