在两个 java 程序之间交换双精度数组的最快方法
Fastest way to exchange an array of double between two java programs
我需要两个单独的 java 程序,运行在单独的 JVM 中通过文件流(linux 管道)或网络尽快交换数字数据联系。
每条消息都是一个 double[],其中数组的长度因消息而异。我很想知道最快的方法是什么,尤其是在两个 JVM 运行 在同一台机器或同一硬件上的情况下。
在 C-like 语言中,这可以通过将数组别名为字节缓冲区并按原样传输字节缓冲区(加上一个小的 header 来告诉接收者关于要创建以占用缓冲区的数组的大小)。 Java 有类似的可能吗?
通过套接字连接,在另一端使用 ObjectOutputStream
to write the object directly to the stream, and use an ObjectInputStream
反序列化。
简单地说,发送:
OutputStream out; // of socket
double[] array;
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(array);
接收:
InputStream in; // of socket
ObjectInputStream ois = new ObjectInputStream(in);
double[] array = (double[])ois.readObject();
这使用了java的内置序列化库,速度越快越好。所有基元和基元数组都可以通过这种方式序列化(任何实现 @Serializable
的东西也是如此)。
我需要两个单独的 java 程序,运行在单独的 JVM 中通过文件流(linux 管道)或网络尽快交换数字数据联系。
每条消息都是一个 double[],其中数组的长度因消息而异。我很想知道最快的方法是什么,尤其是在两个 JVM 运行 在同一台机器或同一硬件上的情况下。
在 C-like 语言中,这可以通过将数组别名为字节缓冲区并按原样传输字节缓冲区(加上一个小的 header 来告诉接收者关于要创建以占用缓冲区的数组的大小)。 Java 有类似的可能吗?
通过套接字连接,在另一端使用 ObjectOutputStream
to write the object directly to the stream, and use an ObjectInputStream
反序列化。
简单地说,发送:
OutputStream out; // of socket
double[] array;
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(array);
接收:
InputStream in; // of socket
ObjectInputStream ois = new ObjectInputStream(in);
double[] array = (double[])ois.readObject();
这使用了java的内置序列化库,速度越快越好。所有基元和基元数组都可以通过这种方式序列化(任何实现 @Serializable
的东西也是如此)。