Я читал статью, написанную участником ASF, и он вкратце упомянул, что «старый трюк Java» для глубокого клонирования объекта состоит в его сериализации и последующей десериализации в другой объект.Когда я прочитал это, я сделал паузу и подумал: «Эй, это довольно умно».К сожалению, ни глубокое клонирование, ни сериализация не были предметом статьи, и поэтому автор никогда не приводил пример того, о чем он говорил, и онлайн-поиски ничего не вытянули в этом направлении.
Iнадо предположить, что мы говорим о что-то , которое выглядит так:
public class Dog implements Serializable
{
// ...
public Dog deepClone()
{
Dog dogClone = null;
try
{
FileOutputStream fout = new FileOutputStream("mydog.dat");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(this);
oos.close();
FileInputStream fin = new FileInputStream("mydog.dat");
ObjectInputStream ois = new ObjectInputStream(fin);
dogClone = (Dog)ois.readObject();
ois.close();
return dogClone;
}
catch(Exception e)
{
// Blah
}
}
При условии, что я могу быть немного отключен (плюс или минус несколько строк кода), это общепринятая практика глубокого клонирования объекта? Есть ли какие-либо подводные камни или предостережения в этом методе?
Существуют ли проблемы с синхронизацией / параллелизмом / безопасностью потоков?
Потому что, если это лучший способ глубокого клонирования объектов, я собираюсь использовать его религиозно .