java RandomAccessFile EOFException - PullRequest
       61

java RandomAccessFile EOFException

1 голос
/ 04 февраля 2020

Я пытаюсь проверить, пуста ли определенная позиция в RandomAcceessFile, чтобы избежать перезаписи некоторых данных перед записью в файл. Я инициализировал очень большой RandomAccessFile:

randAccFile = new RandomAccessFile( DIR + "/" + FILENAME, "rw" );
randAccFile.setLength(LARGE_SIZE);

Затем у меня есть этот метод, чтобы проверить, является ли данная позиция пустой, допустим, указатель установлен в 20:

randAccFile.seek(pointer);
byte[] data = new byte[BLOCK_SIZE];
randAccFile.readFully(data);

Впоследствии я я пытаюсь проверить пустоту, обрезав данные и увидев, равна ли длина результирующей строки 0. Прежде чем я доберусь до этой точки, readFully () выдает

java.io.EOFException
        at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:474)
        at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:448)

Интересно, не был ли RandomAccessFile инициализирован справа Кстати, или если мне не разрешено читать полностью из части, которая еще не была заполнена. Мне также интересно, есть ли лучший способ проверить, является ли RandomAccessFile пустой определенной позиции. Удивительно, что я получаю исключение EOF, так как длина файла намного больше, чем смещение, при котором я пытаюсь прочитать + размер блока. В моей программе может случиться так, что будут части, которые навсегда останутся пустыми, и что после этого будут порции данных, поскольку я не пишу и не читаю их последовательно.

Любые предложения приветствуются.

...