Как читать и редактировать текст в сериализованном файле?
У меня есть объект, который сериализован и записан в файл.
Прежде чем сериализовать файл обратно в экземпляр объекта, я хочу злонамеренно отредактировать текст в файле.
//FILE TAMPER
//Lexical block: Tamper
{
String output = null;
//Lexical block make output
{
LinkedList<String> lls = new LinkedList<String>();
//Lexical block: Reader
{
BufferedReader br = new BufferedReader(new FileReader(fileString));
while (br.ready()) {
String readLine = br.readLine();
lls.add(readLine);
}
br.close();
}
//Lexical block: manipulate
{
//Henry Crapper
final String[] llsToArray = lls.toArray(new String[lls.size()]);
for (int i = 0; i < llsToArray.length; i++) {
String line = llsToArray[i];
if (line.contains("Henry")) {
line = line.replace("Henry",
"Fsekc");
llsToArray[i] = line;
}
if (line.contains("Crapper")) {
line = line.replace("Crapper",
"Dhdhfie");
llsToArray[i] = line;
}
lls = new LinkedList<String>(Arrays.asList(llsToArray));
}
}
//Lexical block: write output
{
StringBuilder sb = new StringBuilder();
for (String string : lls) {
sb.append(string).append('\n');
}
output = sb.toString();
}
}
//Lexical block: Writer
{
BufferedWriter bw = new BufferedWriter(new FileWriter(fileString));
bw.write(output);
bw.close();
}
}
Однако отредактированный файл некорректен и содержит несколько необычных символов.
//Before
¨Ìsr&Snippets.Parsed.EmployeeSerialization0I
bankBalanceLnametLjava/lang/String;xp•Åt
Henry Crappe
//After
ÔøΩÔøΩsr&Snippets.Parsed.EmployeeSerialization0I
bankBalanceLnametLjava/lang/String;xpÔøΩÔøΩt
Fsekc Dhdhfie
Я предполагаю, что есть какая-то нечитаемая проблема характера или что-то в этом роде?
Ответ продолжен в новом вопросе здесь
1 ответ
Решение
Файл, содержащий экземпляр сериализованного объекта, является двоичным файлом: его не следует редактировать с помощью BufferedWriter. Отредактируйте его с помощью RandomAccessFile, например.
Если вам интересно, почему кодировка, используемая в Writer, не смогла сопоставить один-к-одному с байтом. Сохранение всего файла изменило бы и неожиданные позиции.