我正在使用Gearman分发不同的任务,因此我正在使用java-gearman-service来实现客户端和工作程序。
但是,我无法弄清楚我收到的数据GearmanJobEventCallback<T>::onEvent
和GearmanFunction::work
GearmanJobEventCallback<T>::onEvent
:
如何将event.getData()
字节数组转换为所需的数据?例如状态或返回的数据?当我发送status(3,10)时,它返回一个字节数组[51,0,49,48]-嗯,这对我的客户端不是很有用。用ObjectInputStream反序列化似乎并不成功。
与工作方法的返回数据相同,我如何“解码”呢?
如何从data
中的work
方法“解码” GearmanFunction
参数(字节数组)?
任何输入将不胜感激!
最佳答案
好的,似乎这个库的创建者似乎让用户要处理很多事情..:D
我已经找到一种解决此问题的方法,希望它可以对遇到此问题的任何人有所帮助。
String numeratorStr = "";
String denominatorStr = "";
boolean writeNumerator = true;
for (byte b : event.getData()) {
if (b == 0) {
writeNumerator = false;
continue;
}
if (writeNumerator) {
numeratorStr += (char) b;
} else {
denominatorStr += (char) b;
}
}
int numerator = Integer.parseInt(numeratorStr);
int denominator = Integer.parseInt(denominatorStr);
似乎字节数组值是来自ASCII表的条目,并像下面这样放在一个字节数组中:http://code.google.com/p/java-gearman-service/source/search?q=GEARMAN_JOB_STATUS&origq=GEARMAN_JOB_STATUS&btnG=Search+Trunk
希望这可以帮助 :)