Как сохранить объект, реализующий org.apache.geode.pdx.PdxSerializable в файле в Java - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть класс, реализующий org.apache.geode.pdx.PdxSerializable, и мне нужно хранить его объекты в файле в Java.Для sotring в файле объект должен быть Serializable, но класс PDXSerializable используется для хранения данных в gemfire, и поэтому мы не можем использовать класс Serializable.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Возможно, вы захотите взглянуть на JSONFormatter:

http://gemfire -95-javadocs.docs.pivotal.io / org / apache / geode / pdx / JSONFormatter.html

У него есть статический метод, который превращает PDXInstance в строку JSON.

Если предположить, что данные находятся в GemFire, то для их вывода в виде PDXInstance вам просто нужно написать простой клиент с "pdx".-read-serialized "установлен в true.С этим параметром, когда ваш клиент вызывает get или getAll, возвращаемые объекты будут PDXInstances, и вы можете использовать JSONFormatter для непосредственного превращения их в JSON.

0 голосов
/ 07 февраля 2019

Почему вы не используете настраиваемую сериализацию объектов?Вот пример, который я быстро создал:


 private class Foo implements PdxSerializable {
        private String bar;
        private Integer baz;

        public Foo(final String bar, final Integer baz) {

            this.bar = bar;
            this.baz = baz;
        }

        public String getBar() {
            return bar;
        }

        public Integer getBaz() {
            return baz;
        }
        public void toData(PdxWriter out) {
         //your pdx stuff
        }

        public void fromData(PdxReader in) {
          //your pdx work
        }
    }

//and a custom reader and writer 
     private void writeCustom(final Foo foo, final Path path) throws IOException {
        try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(path.toFile()))) {
            objectOutputStream.writeChars(foo.getBar());
            objectOutputStream.writeInt(foo.getBaz());
        }
    }

    private Foo readCustom(final Path path) throws IOException {
        try(ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(path.toFile()))) {
            String bar = objectInputStream.readUTF();
            Integer baz = objectInputStream.readInt();
            return new Foo(bar, baz);
        }
    }

Пользовательская сериализация Документация Oracle - https://www.oracle.com/technetwork/articles/java/javaserial-1536170.html

Аналогичный вопрос с отличными ответами - Пользовательская сериализация Java

...