Есть определенный класс в сторонней библиотеке, которую я хочу преобразовать в последовательную форму. Как я пошел бы о выполнении этого?
Я предполагаю, что должен буду написать метод, который берет в объекте класса и использует отражение, чтобы получить ценности члена парламента, не занимающего официального поста. Тогда для десериализации я использовал бы отражение, чтобы отложить ценности.
Это работало бы? Есть ли более легкий путь?
Вы можете просто использовать объект передачи, который реализует 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:
Вы должны обернуть его во что-то, что делает сериализацию.
В идеале сторонний класс поддерживает некоторую другую форму сериализации, например, сериализацию XML (которая основана на свойствах фасоли). Если нет, вы должны катиться. Значит ли это отражение или только Getter, Devices и конструкторы, зависит от класса.
В любом случае обертка преобразует объект в байт [] или строку или что-то еще и записывать, что в вывод сериализации. О десериализации он восстанавливает объект из этих данных.
Два метода, которые ваша оболочка должна реализовать
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
Многое зависит от характера стороннего класса. Это окончательно, у него нет конструктора аргументов, вы можете построить его данным известным значениям или он построен другим классом, он сам содержать несериализуемые члены?
Простые способы - декомпилировать класс, добавить оружие Сериализация и перекомпилируйте его, но если он содержит несериализуемые участники, все становится все сложнее.