我使用以下代码将图像从源复制到目标
public static void copyFile(File sourceFile, File destFile) throws IOException {
if (!sourceFile.exists()) {
return;
}
FileChannel source = null;
FileChannel destination = null;
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
if (destination != null && source != null) {
destination.transferFrom(source, 0, source.size());
}
if (source != null) {
source.close();
}
if (destination != null) {
destination.close();
}
}
我已经能够使用此代码传输近1500张图像,但是没有完全传输一张图像。然后在搜索时我在FileChannel android文档中发现了这个"调用此方法可能会也可能不会传输所有请求的字节;是否这样做取决于渠道的性质和状态。如果该通道的文件包含从给定位置开始的少于计数的字节,或者如果目标通道是非阻塞的并且在其输出缓冲器中具有少于计数的字节空闲,则传送的字节数少于所请求的字节数。 "来自link。我想知道这是100%保证复制图像的方式还是我应该使用字节系统来复制图像。我的图片采用加密格式。我必须以同样的方式复制它们。此外,我正在复制时删除原始图像,因此我有一个案例我丢失了图像,因为它没有完全复制,我删除了原始图像。感谢
答案 0 :(得分:0)
你看起来不错。基本上它说如果您要复制的文件小于您指定的大小,它将传输文件并停止(它不会填充到您传递的大小),这就是您想要的。如果目标是非阻塞的,它也将停止,并且它需要阻止传输更多,但默认情况下文件通道是阻塞的。