首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataInputStream奇怪行为

DataInputStream奇怪行为
EN

Stack Overflow用户
提问于 2016-11-26 06:39:40
回答 1查看 108关注 0票数 0

我想从二进制文件构建一个hashmap。这个二进制文件的结构如下:第一个整数表示我必须从流中读取的整数数,以便构建哈希映射,后面跟着键/值对。

因此,对于具有三个值的散列映射,总共有7个整数:

1 int读-2键-3值-4键-5值-6键-7值

以下两个代码怎么可能有两个不同的结果?唯一的区别是,在第一个示例中,我使用辅助变量来存储要读取的字节的值。在第二个例子中,我直接在for循环中使用它。

代码语言:javascript
复制
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;
}

这是没有辅助变量的代码:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-26 06:47:12

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40815716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档