代码之家  ›  专栏  ›  技术社区  ›  Vishnu Viswambharan

使用FileOutputStream在Java中写入文件

  •  0
  • Vishnu Viswambharan  · 技术社区  · 6 年前
    String remoteFile2 = "/test/song.mp3";
                File downloadFile2 = new File("D:/Downloads/song.mp3");
                OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
                InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
                byte[] bytesArray = new byte[4096];
                int bytesRead = -1;
                while ((bytesRead = inputStream.read(bytesArray)) != -1) {
                    outputStream2.write(bytesArray, 0, bytesRead);
                }
    

    这是一个用java编写代码的示例文件,

    byte[] bytesArray = new byte[4096];
    

    在这行中,4096的确切含义是什么,更改此值的可能性是什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mạnh Quyết Nguyễn    6 年前

    在处理流时,您经常读取块中的字节。

    如果逐个读取/写入字节,则每个字节都会有大量开销(例如初始化数组以存储字节、将字节放入流、记住文件中的当前位置等等)。

    因此,如果您读取一组字节,则仍会有这些开销,但开销较小(例如,如果您有4000个字节,则开销为4000x。但如果您每次读取100个字节,则开销仅为4000/100=40x)

    通常选择块的长度来平衡读/写块的时间和块的大小。

    它通常设置为2k或4k。可能与磁盘扇区有关(512字节,2048字节…)

        2
  •  0
  •   Naresh Bharadwaj    6 年前

    这里4096是缓冲区大小。因此,每当循环进行时,首先读取4096字节,然后再进入循环。