【问题标题】:Fastest way to exchange an array of double between two java programs在两个 java 程序之间交换双精度数组的最快方法
【发布时间】:2016-05-18 19:57:51
【问题描述】:

我需要两个独立的 java 程序,在不同的 JVM 中运行,以便通过文件流(linux 管道)或网络连接尽可能快地交换数字数据。

每条消息都是一个 double[],其中数组的长度可能因消息而异。我会感兴趣最快的方法是什么,尤其是在两个 JVM 都运行在同一台机器或同一硬件上的情况下。

在类 C 语言中,这可以通过将数组别名为字节缓冲区并按原样传输字节缓冲区来完成(加上一个小标题,它将告诉接收者要创建的数组的大小)缓冲)。 Java 是否也有类似的可能?

【问题讨论】:

  • Json over network sockets 看起来不错。

标签: java arrays serialization data-exchange


【解决方案1】:

通过套接字连接,使用ObjectOutputStream 将对象直接写入流,并在另一端使用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 的 Object*Stream 可能是最快但也是最便携的方法之一,而且它不需要任何库!谢谢!
猜你喜欢
  • 2014-04-19
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多