gpt4 book ai didi

java - FileInputStream.read(byte[]) 有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:24 26 4
gpt4 key购买 nike

回应my answer to a file-reading question ,一位评论者表示 FileInputStream.read(byte[]) “不能保证填充缓冲区。”

File file = /* ... */  
long len = file.length();
byte[] buffer = new byte[(int)len];
FileInputStream in = new FileInputStream(file);
in.read(buffer);

(代码假定文件长度不超过2GB)

除了 IOException 之外,还有什么可能导致 read 方法无法检索整个文件内容?

编辑:

代码的想法(以及我回答的问题的 OP 的目标)是一次性将整个文件读入一 block 内存,这就是为什么 buffer_size = file_size.

最佳答案

Apart from an IOException, what could cause the read method to not retrieve the entire file contents?

在我自己的 API 实现中,在我自己的滚动文件系统上,我只是选择填充一半的缓冲区......开个玩笑。

我的观点是,即使我不是在开玩笑,从技术上讲它也不会是一个错误。这是方法契约的问题。这是契约(Contract)(文档)在这种情况下是:

Reads up to b.length bytes of data from this input stream into an array of bytes.

即,它不保证填充缓冲区。

根据 API 实现,可能还有文件系统,read 方法可能选择不填充缓冲区。这基本上是方法的契约说了什么的问题。


底线:可能有效,但不保证有效。

关于java - FileInputStream.read(byte[]) 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com