DatainputStream奇怪的行为



我想从二进制文件中构建哈希图。该二进制文件具有以下结构:第一个整数指示我必须从流中读取的整数数量才能构建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。您的第一个方法仅通过阅读一次并缓存值来正确地做到这一点。

相关内容

  • 没有找到相关文章

最新更新