我想从二进制文件构建一个hashmap。这个二进制文件具有以下结构:第一个整数表示我必须从流中读取的整数数,以便构建散列映射,后跟键/值对。
因此,对于具有三个值的hashmap,我将总共有7个整数:
1 int to read - 2 key - 3 value - 4 key - 5 value - 6 key - 7 value
以下两个代码有两种不同的结果?唯一的区别是在第一个例子中我使用辅助变量 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。
答案 0 :(得分:3)
在每次迭代之前执行for
循环的整个条件。在第二种方法中,i < DIS.readInt();
在每次迭代之前运行,从int
读取新的DIS
。您的第一种方法是以正确的方式完成,只需读取一次并缓存该值。