java程序下载文件已损坏。为什么?

时间:2012-02-19 22:12:57

标签: java multithreading image download

我创建了一个java程序,它将URL中的文件逐部分下载到多个文件中,然后将这些文件中的字节读入完整下载的对象。它的工作原理是将要下载的文件部分分成线程。每次我的程序下载文件时,它都会获得所有字节,文件大小也是正确的,但有时图像会失真。其他时候图像是完美的。会导致这种情况的原因是什么?

各个线程用来下载文件部分的代码:

       URL xyz = new URL(urlStr);
       URLConnection connection= xyz.openConnection();
       // set the download range 
       connection.setRequestProperty("Range", "bytes="+fileOffset+"-");
       connection.setDoInput(true);
       connection.setDoOutput(true);
       // set input stream and output stream
       in = new BufferedInputStream(connection.getInputStream());
       fos = new FileOutputStream("part_"+this.partNumber);
       out = new  BufferedOutputStream(fos, this.downloadFileSize);
       // create buffer to read bytes from file into
       byte[] contentBytes = new byte[downloadFileSize];
       // read contents into buffer
       in.read(contentBytes, 0, this.downloadFileSize);
       out.write(contentBytes, 0, this.downloadFileSize);

将文件放在一起的代码:

        int partSize=0;
        //Create output stream
    OutputStream saveAs = new FileOutputStream(fileName);

        for(int i=0; i<filePieces;i++)
        {
           File file=new File("part_"+(i+1));
           partSize=(int)file.length();
            byte fileBuffer[]=new byte [partSize];
           //Create input stream
           InputStream is = new FileInputStream(file);
           is.read(fileBuffer);
           saveAs.write(fileBuffer);
           is.close();           
        }

1 个答案:

答案 0 :(得分:2)

如果没有进一步的细节和示例代码,您就会强制要求任何答案。这是我的:

  • 当您使用Input- / OutputStreams时,您正在使用读者和作家。
  • 你以某种方式搞砸了同步。通过本地java.util.concurrent解决方案支持synchronized包中的课程。