【问题标题】:Java InputStream to Python (PY4J)Java InputStream 到 Python (PY4J)
【发布时间】:2014-11-11 12:34:02
【问题描述】:

我正在使用 PY4J (http://py4j.sourceforge.net/) 在 python 中运行 Java 代码。

我的 java 函数返回一个 InputStream,我想在我的 python 代码中操作它:

Java 代码:

public InputStream getPCAP(key) {
        InputStream inputStream = cyberStore.getPCAP(pcapStringKey);
        return inputStream;
}

Python 代码:

from py4j.java_gateway import JavaGateway

gateway = JavaGateway()
input_stream = PY4J_GateWay.getPCAP(key); 
...

如何在 python 中获取 InputStream?

在将其返回给 python 之前,我是否应该将其转换为 java 代码中的其他内容?

【问题讨论】:

  • 我们需要更多代码来回答这个问题:包含 getPCAP 的类以及如何创建和访问此类的实例。
  • 在通过 Py4j 共享流和将数据存储在文件系统(甚至 /dev/shm)和加载正常的 python 操作方式之间,你有任何基准比较吗?

标签: java python inputstream py4j


【解决方案1】:

我猜你想从输入流中读取数据。

Java 的 API 允许您从 InputStream 读取到 byte 数组。没有简单的方法通过引用传递 Pythonic bytearray,但您可以轻松添加一个从 InputStream 读取并返回 byte 数组的方法:

public byte[] read(InputStream stream, int count) throws IOException {
    byte[] bytes = new byte[count];
    stream.read(bytes);
    return bytes;
}

然后,在 Python 中,您可以调用此方法从 InputStream 中读取:

gateway = JavaGateway()
input_stream = gateway.getPCAP(key)
data = gateway.read(input_stream, 1000) # reads 1000 bytes from input_stream

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 2014-01-12
    • 2017-08-07
    • 1970-01-01
    • 2015-07-13
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多