Можно ли установить специальный байт в RandomAccessFile обратно на ноль? - PullRequest
1 голос
/ 10 декабря 2010

Origianlly, когда я создал RandomAccessFile, я пропустил некоторые байты, чтобы те остались нулевыми, но теперь мне нужно удалить некоторые из байтов, которые я написал. Сейчас я перезаписываю местоположение пробелом, но есть ли способ вернуть его пустым?

РЕДАКТИРОВАТЬ: так как он должен содержать значение, я хотел бы знать, как вернуть его к исходному значению, которое назначается по умолчанию при пропуске.

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Файл не может содержать «пустой» байт. Каждый байт в файле должен иметь значение от 0 до 255.

Если вы хотите «стереть» все байты после определенной точки, вы можете использовать RandomAccessFile.setLength, который усекает файл.


Относительно вашего комментария: Если вы хотите установить некоторые байты обратно в исходное значение, я предлагаю вам инкапсулировать RandomAccessFile в вашем собственном классе с картой из индекса в исходное значение байта, которое вы обновляете при каждом вызове write. Затем этот подкласс может предоставить метод restore(int i), который восстанавливает значение байта с индексом i путем поиска исходного значения на карте.

1 голос
/ 10 декабря 2010

Чрезвычайно неясно, что вы пытаетесь сделать, но вы не можете "удалить" байты из начала или середины файла. Обычно вы можете усекать файл, но вы не можете удалить биты из середины - вы обычно создаете новый файл, копируя только те данные, которые вам нужны, и затем, возможно, переименовываете файлы соответствующим образом.

...