gpt4 book ai didi

java - DataInputStream 奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 21:13:03 25 4
gpt4 key购买 nike

我想从二进制文件构建 HashMap 。该二进制文件具有以下结构:第一个整数表示我必须从流中读取的整数数量,以便构建 HashMap ,后跟键/值对。

因此,对于具有三个值的 HashMap ,我总共会有 7 个整数:

1 个要读取的整数 - 2 个键 - 3 个值 - 4 个键 - 5 个值 - 6 个键 - 7 个值

下面的两段代码怎么可能有两种不同的结果呢?唯一的区别是,在第一个示例中,我使用辅助变量 a 来存储要读取的字节值。在第二个中,我直接在 for 循环中使用它。

static Int2IntMap fetchHashMap(Int2IntMap map, DataInputStream DIS) throws IOException {
int a = DIS.readInt();
for (int i = 0; i < a; i++) {
map.put(DIS.readInt(),DIS.readInt());
}
return map;
}

这是没有辅助变量的代码:

static Int2IntMap fetchHashMap(Int2IntMap map, DataInputStream DIS) throws IOException {
for (int i = 0; i < DIS.readInt(); i++) {
map.put(DIS.readInt(),DIS.readInt());
}
return map;
}

前者比后者效果更好,但仍然与我期望的结构不一致。

我不知道这是否相关,但我的实现使用多线程,但每个线程都有自己的DataInputStream。

最佳答案

for的整个状况循环在每次迭代之前执行。在第二种方法中,i < DIS.readInt();每次迭代之前运行,读取新的 int来自DIS 。您的第一个方法以正确的方式执行此操作,仅读取一次并缓存该值。

关于java - DataInputStream 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40815716/

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