我有以下复制文件的方法:
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 gig。
唯一的特点是这两个文件都在非常忙碌的光泽文件系统上,这有可能是一些有趣的东西吗?
答案 0 :(得分:2)
在2Gb被截断的事实让我怀疑。我搜索了它,它看起来像issue with nio。它也可能是目标文件系统允许最大2Gb文件。
目前,缓冲区大小限制为2GB(可以在int中表示的最大正数。对Java 7更新的计划将允许大缓冲区(大小和索引保持为长)。
无论如何,只是为了确定: