Я использую Java appengine и очередь задачи API для выполнения асинхронных задач. Я хотел бы добавить задачу к очереди задачи, но передать объект Java в качестве параметра. Я notic, API опций задачи может добавить параметр как байт [], но я не уверен, как использовать его.
1) Как я сериализировал бы свой объект к байту []? и 2) Как задача считала бы байт [] и восстановила бы исходный объект?
Спасибо.
Serializable предназначен для преобразования объектов в последовательности байтов и наоборот. В простом случае класс Java становится сериализуемым, просто объявляя, что он реализует Serializable
.
Сериализация объекта основана на интроспекции, когда код сериализации смотрит на данные сериализуемого класса и упаковывает их таким образом, чтобы описать структуру и данные. Поскольку поток данных содержит информацию, необходимую для восстановления всего объекта, именно это и делает принимающая сторона.
Вы можете посмотреть на кровавые подробности, обернув ObjectOuputStream
вокруг ByteArrayOutputStream
, записав в него объект и посмотрев на нижележащую строку, но вы, вероятно, найдете Страница сериализации объектов более информативна.
У вас есть несколько методов доставки потока байтов с помощью Queue API,
Использование метода TaskOptions.payload
Использование метода 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