文件从未完全下载



我正在尝试下载/恢复文件。简历似乎有效,但整个下载带来了问题。执行此代码后,测试文件为5242845。但它应该是5242880!我在十六进制编辑器中打开了这两个文件,发现测试文件末尾缺少一些字节(可以开始)。这是代码:

                String url = "http://download.thinkbroadband.com/5MB.zip";
                String DESTINATION_PATH = "/sdcard/testfile";
                URLConnection connection;
                connection = (HttpURLConnection) url.openConnection();
                File file = new File(DESTINATION_PATH);
                if (file.exists()) {
                    downloaded = (int) file.length();
                    connection.setRequestProperty("Range", "bytes=" + (file.length()) + "-");
                }
                connection.setDoInput(true);
                connection.setDoOutput(true);
                BufferedInputStream in = new BufferedInputStream(connection.getInputStream());
                FileOutputStream fos = (downloaded == 0) ? new FileOutputStream(DESTINATION_PATH) : new FileOutputStream(DESTINATION_PATH, true);
                BufferedOutputStream bout = new BufferedOutputStream(fos, 1024);
                byte[] data = new byte[1024];
                int x = 0;
                int i = 0;
                int lenghtOfFile = connection.getContentLength();
                while ((x = in.read(data, 0, 1024)) != -1) {
                    i++;
                    bout.write(data, 0, x);
                    downloaded += x;
         }

我认为问题出在这里while ((x = in.read(data, 0, 1024)) != -1) {

例如,我们有一个1030字节长的文件。第一次写入是好的,bout.write(data,0,1024);,但下次while ((x = in.read(data, 0, 1024)) != -1) {得到-1,因为还剩下1030-1024=6个字节。我们正在尝试写入1024字节!我知道不应该这样,但我似乎就是这么说的。我该怎么想?谢谢

bout.flush();

和/或

bout.close();

您需要关闭BufferedOutputStream,以确保所有缓冲的内容都发送到缓冲的OutputStream。

google告诉我,有一种"可用"的bufferedinputstream方法,所以你可以写(我不是java大师)

while(in.available()>0){x=in.read(数据,1024);关于写入(数据,0,x);}

相关内容

  • 没有找到相关文章

最新更新