有人请向我解释这段代码(java)

时间:2017-07-09 20:19:57

标签: java

这是有效的整个功能:

    public static void downloadPDF(String link) {
    try {
        System.out.println("opening connection");
        URL url = new URL(link);
        InputStream in = url.openStream();
        File f = new File("Resume.pdf");
        FileOutputStream fos = new FileOutputStream(f);
        System.out.println("reading from resource and writing to file...");
        int length = -1;
        byte[] buffer = new byte[1024];// buffer for portion of data from connection
        while ((length = in.read(buffer)) > -1) {
            fos.write(buffer, 0, length);
        }
        System.out.println(f.getName());
        Desktop.getDesktop().open(f);
        fos.close();
        in.close();
        System.out.println("File downloaded");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

问题:请向我解释下面的代码。我想了解它。它一行一行。谢谢。

        FileOutputStream fos = new FileOutputStream(f);
    System.out.println("reading from resource and writing to file...");
    int length = -1;
    byte[] buffer = new byte[1024];// buffer for portion of data from connection
    while ((length = in.read(buffer)) > -1) {
        fos.write(buffer, 0, length);
    }

谢谢!如果您有任何提示可以提供更好的方法,那将会很有帮助。我尝试使用apache pdfbox,但在某些方面并不成功。我会再试一次,但同时这对我很感兴趣。

1 个答案:

答案 0 :(得分:0)

我不完全确定你究竟在问什么,所以我只能用超级基本术语来解释它

打开输出流 - 这基本上是一个文件的“连接”,允许您将信息放入其中。

    FileOutputStream fos = new FileOutputStream(f);

计算机不喜欢一次读取大量内容。相反,大多数程序将分批阅读,有点像你一次从技术上阅读一本书的一页,而不是一次阅读所有页面。这里缓冲区是1024字节,这意味着文件读取长度为1024字节。因此,如果文件是2048字节,那么我们将从中读取两次。

    int length = -1;
    byte[] buffer = new byte[1024];

所以在这里我们将文件读入缓冲区。这仅限于缓冲区大小,但如果没有足够的时间来完全填充它就可以了。如果没有什么可以阅读,那么read将返回-1,我们就会完成阅读。

    while ((length = in.read(buffer)) > -1) {

现在我们从文件中读取的内容(当前位于buffer数组中)将其写入输出流。 0, length表示我们从索引0写入缓冲区中的索引length,并将该信息发送到我们正在创建的文件中。

        fos.write(buffer, 0, length);
    }