Как передать сериализованный объект appengine задаче Java?

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

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

Спасибо.

9
задан skaffman 24 March 2010 в 12:50
поделиться

2 ответа

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

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

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

1
ответ дан 4 December 2019 в 21:09
поделиться

У вас есть несколько методов доставки потока байтов с помощью Queue API,

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

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

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

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

// task is an instance of TaskOptions // Base64 - здесь используется реализация Apache для кодирования байтов в base 64 // taskBytes - ваши сериализованные байты

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

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

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

byte[] questionsBytes = Base64.decodeBase64(request.getParameter("Enter-Parameter-Name").getBytes());

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

Всего наилучшего Uri

9
ответ дан 4 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: