private static InventoryItems readObjectFromFile(int recordNumber, final int sizeOfRecord) throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("Inventory.dat"));
objectInputStream.skipBytes(getBytes(recordNumber, sizeOfRecord));
InventoryItems tempObject = new InventoryItems((InventoryItems) objectInputStream.readObject());
objectInputStream.close();
return tempObject;
}
private static int getBytes(int recordNumber, int sizeOfRecord) {
return sizeOfRecord * (recordNumber - 1);
}
Я делал программу для хранения некоторых предметов инвентаря в файле, и теперь, когда я хочу получить доступ к записи случайным образом на основе номера записи (то есть 1, 2, 3 и т. Д. c) .. Кажется, функция readObjectFromFile
всегда возвращает первую запись, которая была добавлена в файл .dat ... хотя я использовал метод skipBytes
... Размер каждой записи составляет 44 байта (20 символов строки и 4 байта). of int) ... Короче говоря, этот фрагмент кода должен работать так, как будто одна запись имеет длину 44 байта, а пользователь вводит '2' в переменную recordNumber
, поэтому 44 * (2-1) = 44. 44-й байт байт, с которого должна считываться одна запись, до 88-го байта.