我想从二进制文件中构建哈希图。该二进制文件具有以下结构:第一个整数指示我必须从流中读取的整数数量才能构建hashmap,然后构建键/值对。
。因此,对于具有三个值的哈希图,我总共有7个整数:
1 int读取-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();
在之前运行迭代之前,从DIS
读取新的int
。您的第一个方法仅通过阅读一次并缓存值来正确地做到这一点。