Java传输文件arrayindexoutofboundsexception

时间:2016-09-23 23:42:50

标签: java networking io

我正在尝试创建要使用的备份程序。我可以备份小文件,但是一旦我尝试备份任何大文件,我就会得到一个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);
    }

有什么建议吗?

2 个答案:

答案 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);
    }
}