java - Java 中的 python pickle.dumps 和 struct.pack

标签 java python pickle

我正在尝试向碳( Graphite )服务器提供来自 Java 应用程序的数据。 我想使用 pickle 协议(protocol)而不是 oneline 协议(protocol),因为它似乎要快得多。

我已经在一个小的 python 脚本中完成了此操作,该脚本是从我的 Java 应用程序调用的。但我想用原生 Java 编写它。

Python 脚本如下所示:

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

如果不需要包含任何库,那就太好了。

有人能解决这个问题吗?

最佳答案

现在已经解决了。

我通过使用 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();
}

关于java - Java 中的 python pickle.dumps 和 struct.pack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380841/

相关文章:

python - XPath:在另一个 DIV 中获取给定条件的文本

python - 在 sklearn 管道中传递上一步的参数

python - 可以对顶级类(class)进行 pickle 和 unpickled(文档有误吗?)

java - 如何在 Java 或 Python 中使用文件系统缓存?

java - 无法加载类 com.android.build.gradle.managed.NdkConfig$Impl

python - numpy `rint` 奇怪的行为

python - 使用 Pygame 和 Pickle 加载之前耗时

java - JAXB 解码错误后文件被阻止的文件

Java - 找不到 .class 问题

python - pickle : Why are they called that?