我正在使用java appengine和任务队列API来运行异步任务。我想在任务队列中添加一个任务,但是传递一个java对象作为参数。我注意到任务选项api可以将参数添加为byte [],但我不确定如何使用它。
1)如何将对象序列化为byte []? 和 2)任务如何读取byte []并重建原始对象?
感谢。
答案 0 :(得分:9)
您可以使用Queue API提供一些字节流技术,
使用TaskOptions.payload方法
使用TaskOptions.params方法
我将演示如何编写&读取字节流信息,因为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页面更多信息。