Дополнительные нечетные символы добавляются в вывод сериализации - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь сериализовать строковый объект, написав собственный код для получения байтового массива этого объекта вместо использования string.getBytes () , но я получаю дополнительные нечетные символы в выводе следующим образом

Вывод

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.Arrays;

public class Demo {

    private static final String OUTPUT_FILE = "D:\\testFile.txt";

    public static void main(String[] args) throws IOException {

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutput out = null;
        byte[] bytes;

        String content = "Hello Java Code Geeks";

        out = new ObjectOutputStream(bos);
        out.writeObject(content);
        out.flush();
        bytes = bos.toByteArray();

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        outputStream.write(bytes);


        System.out.println(Arrays.toString(outputStream.toByteArray()));
        System.out.println(outputStream.toString());

        // Write the internal buffer to an output stream
        outputStream.writeTo(new FileOutputStream(OUTPUT_FILE));

    }
}

PS: я должен использовать java.io.OutputStream класс, но если есть какой-либо другой способ получить ByteArray от объекта, отличного от моего или string.getBytes () , не стесняйтесь предлагать.

Резонанс не использования string.getBytes () - это общий способ получения байтового массива из любых типов объектов, включая определяемые пользователем объекты.

1 Ответ

0 голосов
/ 07 июня 2018

Вам необходимо прочитать его как объект

public static void main(String[] args) throws IOException, ClassNotFoundException {

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutput out = null;
    byte[] bytes;

    String content = "Hello Java Code Geeks";

    out = new ObjectOutputStream(bos);
    out.writeObject(content);
    out.flush();
    bytes = bos.toByteArray();

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    outputStream.write(bytes);

    System.out.println(Arrays.toString(outputStream.toByteArray()));
    System.out.println(outputStream.toString());
    // correct string printed out
    System.out.println(new ObjectInputStream(new ByteArrayInputStream(outputStream.toByteArray())).readObject());

}

ObjectOutputStream записывает в файл дополнительную информацию (например, имя класса и т. Д.), Это, вероятно, символы, которые вам интересны.

...