Библиотека глубокого копирования Java - PullRequest
5 голосов
/ 15 февраля 2011

Есть ли библиотека, которая может делать глубокие копии?

ex) обычный объект, массив, список, входной поток и т. Д.

Ответы [ 4 ]

6 голосов
/ 15 февраля 2011

@ Запись Конрада - точная. Единственный общий способ глубокого копирования - использовать механизм сериализации Java.

Очевидно, это дорого.

Другое предостережение в том, что некоторые объекты Java невозможно скопировать при сериализации. Примеры включают

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

  • Потоки в общем случае не могут быть сериализованы, потому что вы не можете получить состояние потока, который уже был записан (записывающие устройства, выходные потоки) или который еще предстоит прочитать (читатели, входные потоки). (Действительно, в случае считывателя / входного потока это состояние может быть буквально бесконечным.)

  • Невозможно сериализовать компоненты графического интерфейса, поскольку они зависят от (внешней) графической среды, которую нельзя сериализовать.

4 голосов
/ 15 февраля 2011

Ищите сериализацию. Java поддерживает его из коробки, но вы также можете попробовать Hessian, Kryo ...

Вот введение в сериализацию Java: http://java.sun.com/developer/technicalArticles/Programming/serialization/

А вот тест, выполненный ребятами из Kryo: http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking (список из 20 библиотек сериализации)

3 голосов
/ 15 февраля 2011

Может быть, вы можете взглянуть на Бульдозер .

1 голос
/ 15 февраля 2011
  1. Для небольших объектов: копировать конструктор.
  2. Для больших объектов, чьи ссылки на элементы имеют древовидную структуру, перейдите к сериализации Java.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...