gpt4 book ai didi

Java BufferedInputStream 行为

转载 作者:行者123 更新时间:2023-12-04 04:55:08 27 4
gpt4 key购买 nike

如果文件大小 > 8k,为什么读取的最后一个字节 = 0?

private static final int GAP_SIZE = 8 * 1024;

public static void main(String[] args) throws Exception{
File tmp = File.createTempFile("gap", ".txt");
FileOutputStream out = new FileOutputStream(tmp);
out.write(1);
out.write(new byte[GAP_SIZE]);
out.write(2);
out.close();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(tmp));
int first = in.read();
in.skip(GAP_SIZE);
int last = in.read();
System.out.println(first);
System.out.println(last);
}

最佳答案

InputStream API 表示,由于各种原因,skip 方法最终可能会跳过一些较小的字节数。试试这个

...
long n = in.skip(GAP_SIZE);
System.out.println(n);
...

它打印 8191 而不是预期的 8192。这与 BufferedInputStream 实现细节有关,如果您将其删除(无论如何在这种具体情况下它不会提高性能),您将获得预期的结果
...
InputStream in = new FileInputStream(tmp);
...

输出
1
2

关于Java BufferedInputStream 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16868748/

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