我正在使用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

希望这可以帮助 :)

09-25 19:30