Файл загрузки Java-программы поврежден.Зачем? - PullRequest
0 голосов
/ 20 февраля 2012

Я создал программу 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 Ответ

2 голосов
/ 20 февраля 2012

Без дополнительной информации и примера кода вы заставляете любые ответы угадывать.Вот мое:

  • Вы используете Readers and Writers, когда вам нужно использовать Input- / OutputStreams.
  • Вы как-то испортили синхронизацию.Пользуйся классами из пакета java.util.concurrent над домашними synchronized решениями.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...