Как передать сериализованный объект в Java-задачу appengine? - PullRequest
9 голосов
/ 21 марта 2010

Я использую Java Appengine и API очереди задач для запуска асинхронных задач. Я хотел бы добавить задачу в очередь задач, но передать в качестве параметра объект Java. Я заметил, что параметры задачи API могут добавить параметр в виде байта [], но я не уверен, как его использовать.

1) Как мне сериализовать мой объект в байт []? а также 2) Как задача прочитает байт [] и восстановит исходный объект?

Спасибо.

Ответы [ 2 ]

9 голосов
/ 06 августа 2010

У вас есть несколько способов доставки потока байтов с использованием API очереди,

  1. Использование метода TaskOptions.payload

  2. Использование TaskOptions.paramsметод

Я покажу, как записывать и читать информацию о потоке байтов, поскольку есть некоторые незначительные проблемы с реализацией Google Appengine:)

Запись байтов:

// задача является экземпляром TaskOptions // Base64 - здесь используется реализация Apache для кодирования байтов как base 64 // taskBytes - ваши сериализованные байты

task.param ("Enter-Parameter-Name"", Base64.encodeBase64 (taskBytes));

Чтение байтов:

// Base64 - здесь используется реализация Apache для кодирования байтов как базовый 64

байт [] questionsBytes = Base64.decodeBase64 (request.getParameter ("Enter-Parameter-Name"). getBytes ());

Это решение отлично работает для меня.

All the Best Uri

1 голос
/ 21 марта 2010

Превращение объектов в последовательности байтов и наоборот - это то, для чего предназначен Сериализуемый . В простом случае класс Java становится сериализуемым, просто объявив его implements Serializable.

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

Вы можете посмотреть на кровавые подробности, обернув ObjectOuputStream вокруг ByteArrayOutputStream, написать объект для него и посмотреть на базовую строку, но вы, вероятно, найдете страницу Object Serialization более информативный.

...