0

Gearman を使用してさまざまなタスクを分散しているため、クライアントとワーカーの実装に Java-gearman-serviceを使用しています。

ただし、受信したデータを把握できません

GearmanJobEventCallback<T>::onEvent:

event.getData()バイト配列を必要なデータに変換するにはどうすればよいですか? 例: ステータスまたは返されたデータ? status(3,10) を送信すると、バイト配列 [51,0,49,48] が返されます。これはクライアントにとってあまり役に立ちません。ObjectInputStream でのシリアル化解除は成功していないようです。

作業メソッドの返されたデータと同じですが、どうすればそれを「デコード」できますか?

のメソッドdataから引数 (バイト配列) を「デコード」するにはどうすればよいですか?workGearmanFunction

どんな入力でも大歓迎です!

4

2 に答える 2

1

OK、このライブラリの作成者は、ユーザーに処理を任せているようです.. :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 テーブルからのエントリであり、次のようにバイト配列にまとめられているようです。 =検索+トランク

お役に立てれば :)

于 2012-07-09T19:36:03.560 に答える
1

あなたのソリューションは、「ステータス」コールバックをデコードするのに適しています。ステータス パケットは少し変わったケースであり、API にうまく適合しません。残念ながら、それを処理する方法に関するドキュメントはあまりありません。

もう 1 つのアイデアは、GearmanFunctionCallback#sendData(byte[])メソッドを使用することです。sendData メソッドを使用すると、任意のタイプのデータを任意の形式で送信し、クライアントが値をデコードできるようにすることができます。すでに「データ」チャネルを使用している場合は、「警告」チャネルを使用して、型指定されていないデータをクライアントに送り返すこともできます。

于 2012-07-10T05:00:56.170 に答える