我需要两个独立的 java 程序,在不同的 JVM 中运行,以通过文件流(linux 管道)或网络连接尽可能快地交换数字数据。
每条消息都是一个 double[],其中数组的长度可能因消息而异。我会感兴趣最快的方法是什么,尤其是在两个 JVM 都运行在同一台机器或同一硬件上的情况下。
在类似 C 的语言中,这可以通过将数组别名为字节缓冲区并按原样传输字节缓冲区来完成(加上一个小标题,它将告诉接收者要创建的数组的大小以占用缓冲区)。Java有类似的可能吗?
我需要两个独立的 java 程序,在不同的 JVM 中运行,以通过文件流(linux 管道)或网络连接尽可能快地交换数字数据。
每条消息都是一个 double[],其中数组的长度可能因消息而异。我会感兴趣最快的方法是什么,尤其是在两个 JVM 都运行在同一台机器或同一硬件上的情况下。
在类似 C 的语言中,这可以通过将数组别名为字节缓冲区并按原样传输字节缓冲区来完成(加上一个小标题,它将告诉接收者要创建的数组的大小以占用缓冲区)。Java有类似的可能吗?
通过套接字连接,使用 anObjectOutputStream
将对象直接写入流,并ObjectInputStream
在另一端使用 an 反序列化。
简而言之,发送:
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
)。