Как читать и редактировать текст в сериализованном файле?

У меня есть объект, который сериализован и записан в файл.

Прежде чем сериализовать файл обратно в экземпляр объекта, я хочу злонамеренно отредактировать текст в файле.

    //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, не смогла сопоставить один-к-одному с байтом. Сохранение всего файла изменило бы и неожиданные позиции.

Другие вопросы по тегам