У меня есть следующий метод копирования файлов:
public static void nioCopy(File source, File destination) {
FileInputStream fis = null;
FileOutputStream fos = null;
FileChannel input = null;
FileChannel output = null;
try {
fis = new FileInputStream(source);
fos = new FileOutputStream(destination);
input = fis.getChannel();
output = fos.getChannel();
input.transferTo(0, input.size(), output);
} catch (FileNotFoundException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Can't find either of input/output files.", ex);
} catch (IOException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Can't open either of input/output file for reading/writing", ex);
} finally {
try {
fis.close();
fos.close();
input.close();
output.close();
} catch (IOException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Error closing streams", ex);
}
}
}
И я использую для копирования файла, но иногда я получаю тихую ошибку или неопределенное поведение, или я просто не знаю, как это объяснитьи вот что я получаю:
Вот мой источник:
-rw-r--r-- 1 nb9 team92 3.1G 2011-10-13 16:31 6443_6#5_1_6443_6#5_2.fastq.f.fq.gz
А вот и пункт назначения:
-rw-r--r-- 1 nb9 team92 2.0G 2011-10-13 16:49 6443_6#5_1_6443_6#5_2.fastq.f.fq.gz
Я не получаю исключений, пока этот процессвыполняется, и, судя по всему, все должно быть успешно, но затем, когда я начинаю распаковывать файл, я получаю:
java.io.EOFException: неожиданный конец входного потока ZLIB
Ясно, чтопункт назначения на 1 гиг от оригинальной отметки.
Единственная особенность заключается в том, что оба файла находятся на ОЧЕНЬ занятой файловой системе блеска. Возможно ли, что это делает некоторые забавные вещи?