DataInputStream奇怪的行为

时间:2016-11-26 06:39:41

标签: java datainputstream

我想从二进制文件构建一个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。

1 个答案:

答案 0 :(得分:3)

在每次迭代之前执行for循环的整个条件。在第二种方法中,i < DIS.readInt();每次迭代之前运行,从int读取新的DIS。您的第一种方法是以正确的方式完成,只需读取一次并缓存该值。