Java DataInputStream异常行为

Java DataInputStream异常行为,java,datainputstream,Java,Datainputstream,我想从二进制文件构建一个hashmap。这个二进制文件具有以下结构:第一个整数表示我必须从流中读取的整数数量,以便构建hashmap,后跟键/值对 所以对于一个有三个值的hashmap,我总共有7个整数: 读取1整数-2键-3值-4键-5值-6键-7值 以下两种代码如何可能有两种不同的结果?唯一的区别是,在第一个示例中,我使用辅助变量a来存储要读取的字节值。在第二个循环中,我直接在for循环中使用它 static Int2IntMap fetchHashMap(Int2IntMap map, D

我想从二进制文件构建一个hashmap。这个二进制文件具有以下结构:第一个整数表示我必须从流中读取的整数数量,以便构建hashmap,后跟键/值对

所以对于一个有三个值的hashmap,我总共有7个整数:

读取1整数-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)抛出IOException{
int a=DIS.readInt();
for(int i=0;i
这是不带辅助变量的代码:

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;
}
static Int2IntMap fetchHashMap(Int2IntMap map,DataInputStream DIS)抛出IOException{
对于(int i=0;i
前者比后者更有效,但它仍然与我预期的结构不一致


我不知道它是否相关,但我的实现使用多线程,但每个线程都有自己的DataInputStream

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

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

关于线程,每个线程都有自己的
DataInputStream
,这些方法是否也从自己的文件读取?是的,每个线程都有自己的文件关于线程,每个线程都有自己的
DataInputStream
,每个线程也从自己的文件中读取吗?是的,每个线程都有自己的文件