Я хотел бы построить хэш-карту из двоичного файла. Этот двоичный файл имеет следующую структуру: первое целое число указывает количество целых чисел, которые я должен прочитать из потока, чтобы построить хэш-карту, за которой следуют пары ключ/значение.
Таким образом, для хэш-карты с тремя значениями у меня будет всего 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.
DataInputStream
, каждый из них также читает из своего собственного файла? - person Kayaman   schedule 26.11.2016