Здесь есть 2 проблемы - вы не разрешаете 4 байта на int
записанные, и вы не пытаетесь вернуться к началу файла при чтении int
s обратно в память.
Во-первых, метод seek
принимает аргумент количества байтов в качестве смещения в файле.
pos
- позиция смещения, измеренная в байтах от начала файла, вдля установки указателя файла.
Но в Java int
s имеет 4 байта, поэтому вы перезаписываете 3 из 4 предыдущих байтов int
при каждой последующей записи.Либо явно устанавливайте метку на 4 байта позже каждый раз:
storage.seek(4);
storage.writeInt(2);
storage.seek(8);
storage.writeInt(3);
// etc.
Или, что еще проще, метка «делает правильные вещи» и продвигается на соответствующее количество байтов.Просто пропустите seek
s здесь.
storage.writeInt(1);
storage.writeInt(2);
storage.writeInt(3);
storage.writeInt(4);
storage.writeInt(5);
Вторая проблема заключается в том, что при чтении байтов назад вы не сбрасываете метку обратно в начало файла, вызывая EOFException
,Добавьте вызов к seek(0)
, чтобы отправить метку обратно в начало файла.
storage.seek(0);
System.out.println(storage.readInt());
System.out.println(storage.readInt());
System.out.println(storage.readInt());
System.out.println(storage.readInt());
System.out.println(storage.readInt());
Затем я получаю вывод:
1
2
3
4
5