我想从二进制文件构建一个hashmap。这个二进制文件的结构如下:第一个整数表示我必须从流中读取的整数数,以便构建哈希映射,后面跟着键/值对。
因此,对于具有三个值的散列映射,总共有7个整数:
1 int读-2键-3值-4键-5值-6键-7值
以下两个代码怎么可能有两个不同的结果?唯一的区别是,在第一个示例中,我使用辅助变量、来存储要读取的字节的值。在第二个例子中,我直接在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。
发布于 2016-11-26 06:47:12
for循环的整个条件在每次迭代之前执行。在第二个方法中,i < DIS.readInt();在每次迭代之前运行,从DIS读取一个新的int。第一种方法只读取一次并缓存值,这样做是正确的。
https://stackoverflow.com/questions/40815716
复制相似问题