копирование сериализуемых объектов без использования ObjectOutputStream - PullRequest
2 голосов
/ 19 марта 2012

Я успешно использовал ObjectOutputStream и ObjectInputStream для сериализации и десериализации объектов для сервера и клиента, которого я пишу.Сервер и клиент обычно находятся на двух разных компьютерах, но, поскольку это будет пошаговая карточная игра, я также хочу, чтобы пользователи играли локально, и тогда и клиент, и сервер будут работать на одном компьютере.

Теперь я пишу альтернативную реализацию моего интерфейса подключения.Интерфейс содержит такие методы, как void sendToServer (Object) и Object receiveFromServer ()

Обычно функция sendToServer (Object) просто отправляет объект через ObjectOutputStream, но поскольку объекты находятся на одном компьютере, яможет просто создать очередь объектов и нажимать и выскакивать каждый раз при вызове отправки или получения.Проблема, однако, в том, что я не хочу, чтобы у клиента была ссылка на объект, который использует сервер, я хочу, чтобы это была копия.И у меня нет конструктора копирования, и объекты не могут быть клонированы.

Что бы вы сделали в моей ситуации?

Ответы [ 2 ]

4 голосов
/ 19 марта 2012

Посмотрите на ByteArrayInputStream и ByteArrayOutputStream. Используйте их для сериализации ваших объектов в память и получения их от них.

ByteArrayOutputStream bOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bOut);
out.writeObject(new Jedi("Obiwan"));
out.close();

byte[] payload = bOut.toByteArray();

ByteArrayInputStream bIn = new ByteArrayInputStream(payload);
ObjectInputStream in = new ObjectInputStream(bIn);
Jedi jedi = (Jedi) in.readObject();
in.close();

System.out.println(jedi);

В этом случае вы можете использовать структуру памяти для размещения своих байтов вместо отправки их по сети.

Надеюсь, это поможет!

0 голосов
/ 20 марта 2012

Обычно функция sendToServer (Object) просто отправляет объект через ObjectOutputStream, но, поскольку объекты находятся на одном и том же компьютере, я мог бы просто создать очередь объектов и выдвигать и выдвигать каждый раз при отправке или полученииназывается ...

Но это приводит ко всем проблемам, которые вы описали.Так зачем что-то делать?Оставь все как есть.

...