Как перезаписать некоторые байты в файле?

Я создал файл, используя java.io.File, FileInputStream & FileOutputStream. Предположим, что я хочу изменить значение некоторых байтов в файле (например, с 15-го на 35-й байт) без изменения размера файла. Я попытался создать объект RandomAccessFile, а затем использовать RandomAccessFile.seek для перехода к байту номер 15, записи новых байтов и закрытия файла. Файл изменил свой размер. Что не так с этим подходом, и как это можно сделать успешно?


person Blackbelt    schedule 19.11.2010    source источник
comment
Да, пожалуйста, покажите нам фрагмент кода, который вы используете.   -  person jjnguy    schedule 19.11.2010
comment
Я предполагаю, что вы не пытаетесь одновременно использовать FileOutputStream и RandomAccessFile.   -  person Peter Lawrey    schedule 19.11.2010
comment
Если вы используете только RandomAccessFile, единственный способ изменить его размер — использовать setLength(). Если вы не используете это, размер не должен меняться.   -  person Peter Lawrey    schedule 19.11.2010
comment
@Питер, если вы напишете дальше конца, размер также увеличится.   -  person Marcus Adams    schedule 19.11.2010
comment
@Peter Питер Ты ошибся. Благодаря тебе я исправил. Большое спасибо.   -  person Blackbelt    schedule 19.11.2010
comment
Если вам приходится много возиться с файлом, взгляните на Apache Common IO: commons.apache.org/io   -  person Aerosteak    schedule 21.11.2010


Ответы (1)


Вы уверены, что записываете байт в RandomAccessFile? Если вы вызываете метод:

file.write(35);

Затем он фактически записывает 35 как int, что составляет 4 байта. Если вы хотите написать один байт, попробуйте:

file.writeByte(35);
person DaveJohnston    schedule 19.11.2010