如何将序列化对象传递给appengine java任务?

时间:2010-03-20 21:48:34

标签: java google-app-engine task

我正在使用java appengine和任务队列API来运行异步任务。我想在任务队列中添加一个任务,但是传递一个java对象作为参数。我注意到任务选项api可以将参数添加为byte [],但我不确定如何使用它。

1)如何将对象序列化为byte []? 和 2)任务如何读取byte []并重建原始对象?

感谢。

2 个答案:

答案 0 :(得分:9)

您可以使用Queue API提供一些字节流技术,

  1. 使用TaskOptions.payload方法

  2. 使用TaskOptions.params方法

  3. 我将演示如何编写&读取字节流信息,因为google appengine实现存在一些小问题:)

    写入字节:

    // task是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

答案 1 :(得分:1)

将对象转换为字节序列(反之亦然)是Serializable的用途。在简单的情况下,只通过声明它implements Serializable就可以使Java类可序列化。

对象的序列化基于内省,其中序列化代码查看可序列化类的数据,并以描述结构和数据的方式对其进行打包。由于数据流包含重建整个对象所需的信息,这就是接收方所做的事情。

你可以通过在ObjectOuputStream周围包裹ByteArrayOutputStream来查看血腥细节,写一个对象并查看底层字符串,但你可能会找到Object Serialization页面更多信息。