Java InputStream 到 Python (PY4J)

Posted

技术标签:

【中文标题】Java InputStream 到 Python (PY4J)【英文标题】:Java InputStream to 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 操作方式之间,你有任何基准比较吗? 【参考方案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

【讨论】:

以上是关于Java InputStream 到 Python (PY4J)的主要内容,如果未能解决你的问题,请参考以下文章

Java 发送 Live Video InputStream 到 Red5 Media Server

java 将InputStream中的内容读到字节数组

JAVA之InputStream加载网络图片(填充到src)

Java 的 inputStream 读取文本内容

java将InputStream呈现为ByteBuffer而不将整个内容加载到数组中

Java实现inputstream流的复制