На Яве, как я преобразовываю в последовательную форму класс, который не отмечен сериализуемый?

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

Я предполагаю, что должен буду написать метод, который берет в объекте класса и использует отражение, чтобы получить ценности члена парламента, не занимающего официального поста. Тогда для десериализации я использовал бы отражение, чтобы отложить ценности.

Это работало бы? Есть ли более легкий путь?

13
задан Kyle 22 January 2010 в 00:55
поделиться

3 ответа

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

псевдокод:

class ThirdParty{

    int field1;
    int field2;
}

class Transfer implements Serializable{

    int field1;
    int field2;

    /* Constructor takes the third party object as 
       an argument for copying the field values.
       For private fields without getters 
       use reflection to get the values */
    Transfer (ThirdParty orig){
       this.field1=orig.field1;
       this.field2=orig.field2;
    }

    ThirdParty getAsThirdParty(){
        ThirdParty copy=new ThirdParty();
        copy.field1=this.field1;
        copy.field2=this.field2;
        return copy;
    }

    /* override these methods for custom serialization */
    void writeObject(OutputStream sink);
    void readObject(InputStream src);
}

Вы просто должны убедиться, что участники правильно сериализуются, если у вас есть какие-либо специальные объекты-члены Отказ

В качестве альтернативы, если третьим прачечным классом не является окончательным, вы можете просто продлить его, имейте временную сериализацию и записывать свои собственные методы readoObject и ReadObject.

Убедитесь, что для некоторой сериализации Infos:

Секреты сериализации

14
ответ дан 1 December 2019 в 23:31
поделиться

Вы должны обернуть его во что-то, что делает сериализацию.

В идеале сторонний класс поддерживает некоторую другую форму сериализации, например, сериализацию XML (которая основана на свойствах фасоли). Если нет, вы должны катиться. Значит ли это отражение или только Getter, Devices и конструкторы, зависит от класса.

В любом случае обертка преобразует объект в байт [] или строку или что-то еще и записывать, что в вывод сериализации. О десериализации он восстанавливает объект из этих данных.

Два метода, которые ваша оболочка должна реализовать

private void writeObject(java.io.ObjectOutputStream out)
 throws IOException
private void readObject(java.io.ObjectInputStream in)
 throws IOException, ClassNotFoundException;
2
ответ дан 1 December 2019 в 23:31
поделиться

Многое зависит от характера стороннего класса. Это окончательно, у него нет конструктора аргументов, вы можете построить его данным известным значениям или он построен другим классом, он сам содержать несериализуемые члены?

Простые способы - декомпилировать класс, добавить оружие Сериализация и перекомпилируйте его, но если он содержит несериализуемые участники, все становится все сложнее.

1
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: