2

Java アプリケーションからのデータをカーボン (グラファイト) サーバーに供給しようとしています。oneline プロトコルの代わりに pickle プロトコルを使用したいと考えています。

これは、Java アプリケーションから呼び出す小さな python スクリプトで行いました。しかし、これをネイティブ Java で書きたいと思います。

Python スクリプトは次のようになります。

listOfMetricTuples = [('test', (1, 1352903620)), ('test', (2, 1352903620))]
payload = pickle.dumps(listOfMetricTuples)
header = struct.pack("!L", len(payload))
message = header + payload

ライブラリを含める必要がないことは素晴らしいことです。

誰でもこれに対する解決策を得ましたか?

4

2 に答える 2

2

それは今解決されました。

Jythonと次のコードを使用して解決しました。

try{
    Socket s = null;
    try{
    s = new Socket("debian-srv", 2004);
    }catch(UnknownHostException e){
    e.printStackTrace();
    }catch(IOException e){
    e.printStackTrace();
    }
    if (s == null) {
    return -1;
    }


    PyTuple t = new PyTuple(new PyString("Test.brange-debian.mojo"), new PyTuple(new PyInteger(1352975858), new PyInteger(56)));
    PyTuple t2 = new PyTuple(new PyString("Test.brange-debian.mojo"), new PyTuple(new PyInteger(1352975858-60), new PyInteger(43)));
    PyTuple t3 = new PyTuple(new PyString("Test.brange-debian.mojo"), new PyTuple(new PyInteger(1352975858-2*+60), new PyInteger(65)));

    PyList list = new PyList();
    list.append(t);
    list.append(t2);
    list.append(t3);

    PyString payload = cPickle.dumps(list);

    byte[] bytes = ByteBuffer.allocate(4).putInt(payload.__len__()).array();

    s.getOutputStream().write(bytes);
    s.getOutputStream().write(payload.toBytes());
    s.getOutputStream().flush();

    s.close();
}
catch (Exception e) {
    e.printStackTrace();
}
于 2012-11-15T11:16:15.987 に答える
1

How do I serialize a Java object such that it can be deserialized by pickle (Python)?によると、別の代替案。、パイロライトを使用する可能性があります。フットプリントは、Jython を使用する必要がある場合よりも小さい場合があります。

于 2014-03-27T18:02:24.337 に答える