使用FileOutputStream在Java中编写文件

问题描述 投票:0回答:2
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意味着什么,改变这个值的可能性是多少?

java file-io
2个回答
1
投票

处理流时,通常会读取块中的字节。

如果你逐个读/写字节,那么每个字节都会有很多开销(比如初始化数组来存储字节,把字节放到流中,记住文件中的当前位置等等)。

因此,如果你读取一组字节,你仍然有那些开销但是较小(例如,如果你有4000个字节,你有4000x开销。但如果你每次读取100个字节,你只有4000/100 = 40x开销)

通常选择卡盘的长度以在读取/写入块的时间和块的大小之间进行平衡。

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


0
投票

这里4096是缓冲区大小。因此,无论何时进行循环,它首先读取4096个字节,之后它将进入循环内部。

© www.soinside.com 2019 - 2024. All rights reserved.