我正在尝试创建要使用的备份程序。我可以备份小文件,但是一旦我尝试备份任何大文件,我就会得到一个ArrayIndexOutOfBoundsException。
FileOutputStream fos = new FileOutputStream(dp.getPath() + ".jbackup");
byte[] buffer = new byte[4096];
int fileSize = (int)f.length();
int read = 0;
int remaining = fileSize;
while((read = dis.read(buffer, 0, Math.min(buffer.length, remaining))) > 0) {
remaining -= read;
fos.write(buffer, 0, read);
}
有什么建议吗?
答案 0 :(得分:0)
int fileSize = (int)f.length();
问题出在这里。你刚刚创建了那个文件。它的长度为零。将其用作此副本的边界条件没有任何意义。
您的代码似乎来自here,其中fileSize
来自发件人。您还应该注意到,在该代码中,它是long
。您的版本将无法处理超过2GB的文件。
然而,很难相信这是真正的代码。这里没有任何内容可以抛出IndexOutOfBoundsException
。
答案 1 :(得分:-1)
如果您想要更快的方式并且能够复制3GB大小的文件,请尝试以下方式:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class Foo
{
public static void main(final String... args)
throws IOException
{
Files.copy(Paths.get("/home/your file path"),
Paths.get("/destination"), StandardCopyOption.REPLACE_EXISTING);
}
}