DataInputStream 奇怪的行为
DataInputStream strange behaviour
我想从二进制文件构建哈希图。这个二进制文件具有以下结构:第一个整数表示我必须从流中读取的整数数量,以便构建哈希图,后跟 key/value 对。
所以对于具有三个值的哈希图,我总共有 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();
在 each 迭代之前运行,从 DIS
读取新的 int
。你的第一个方法是正确的,只读取一次并缓存值。
我想从二进制文件构建哈希图。这个二进制文件具有以下结构:第一个整数表示我必须从流中读取的整数数量,以便构建哈希图,后跟 key/value 对。
所以对于具有三个值的哈希图,我总共有 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();
在 each 迭代之前运行,从 DIS
读取新的 int
。你的第一个方法是正确的,只读取一次并缓存值。