Настройка Java-сериализации - PullRequest
       3

Настройка Java-сериализации

1 голос
/ 14 сентября 2011

Я просматривал блог , и мне в голову пришел один вопрос.Можно ли перезаписать способ записи ObjectOutputStream.

Допустим, я пишу в файл out.dat, т.е.

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("C:\\out.dat")));
out.writeObject(o);

Когда я открыл файл out.dat в Notepad ++, явидел двоичные данные.Что имеет смысл.Что делать, если я хотел бы настроить способ записи этих данных.Допустим, мне нужен мой файл out.dat в формате JSON (это всего лишь пример, это может быть любой другой формат).Какой метод я должен переписать, чтобы сделать это?

Ответы [ 6 ]

1 голос
/ 14 сентября 2011

В вашем сценарии, где вы ищете специальный механизм сериализации, я бы порекомендовал вам реализовать интерфейс Externalizable и предоставить реализации методов

public void writeExternal(ObjectOutput out) throws IOException

public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException

Вам решать, как вы хотите сериализоваться в этом случае.

1 голос
/ 14 сентября 2011

Вы сможете делать что хотите, реализовав Externalizable и переопределив методы writeExternal и readExternal.Подробнее см. http://download.oracle.com/javase/7/docs/platform/serialization/spec/output.html#3146.

Обратите внимание, что это позволит настроить вывод сериализации одного объекта, но не формат всего потока.Таким образом, вы найдете свою строку JSON внутри других двоичных данных.

1 голос
/ 14 сентября 2011

Вы можете заставить свой объект реализовывать Externalizable и иметь полный контроль над сериализацией.Например, google-gson для JSON при реализации методов readExternal / writeExternal.

1 голос
/ 14 сентября 2011

Я думаю, что вы не должны этого делать, потому что этот формат используется для связи между уровнями (работа с распределенными объектами в сети). Что вы можете сделать, это просто создать обработчик, который будет хранить ваш объект в файле, используя ваш красивый формат.

0 голосов
/ 14 сентября 2011

Ну, в самой Java нет встроенной поддержки сериализации JSON, но тогда я уверен, что вы можете найти фреймворки, которые это делают, или просто написать это сами для простых классов.

Так что для любого класса, который выхотите сериализовать в формате JSON просто перезаписать

 private void writeObject(java.io.ObjectOutputStream out)
     throws IOException
 private void readObject(java.io.ObjectInputStream in)
     throws IOException, ClassNotFoundException;

Не должно быть слишком сложно, если есть какая-то инфраструктура JSON, которая дает вам данные одного экземпляра в строковом формате и наоборот.

0 голосов
/ 14 сентября 2011

Я почти уверен, что в Java нет внутренней поддержки сериализации в JSON. На мой взгляд, вам лучше всего создать интерфейс для получения JSON и иметь любые объекты, которые вы хотите сериализовать в JSON, для реализации этого интерфейса:

public interface IJSONSerializable{
    public String getSerializedForm();
}

А затем используйте базовый FileOutputStream для вывода, поскольку (насколько я понимаю) ObjectOutputStream используется для сериализации объекта в двоичный файл и не имеет встроенной поддержки JSON.

Другие мысли

Если вы решите пойти по этому пути, вы можете написать вспомогательный класс для записи таких вещей, как свойство и значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...