ION API

时间:2020-01-09 10:35:44  来源:igfitidea点击:

Grid Ops中的ION API设计用于字节数组。由于以下原因,我们发现使用字节数组比使用流更容易:

  • 一个字节数组可以读取多次,并可以轻松地在内存内部的各个组件之间传递。
  • 字节数组通常可与CPU高速缓存一起很好地工作。
  • 字节数组可以快速读写,并提供任意访问权限。流通常仅提供单向迭代。
  • 字节数组易于写入文件和网络连接。我们可以一次将ION结构写入字节数组,然后将同一字节数组写入日志和网络。

如果我们正在使用每个连接一个线程的类型平台(例如传统的Java EE),则与使用诸如Vert.x或者Node.JS的单线程,反应式平台相比,使用数组可能会更加痛苦。但是,我们相信单线程平台将是未来,这是选择让Grid Ops在字节数组上工作的另一个原因。

ION 读取器和写入器

Grid Ops中的ION工具由两个ION读取器和两个ION写入器组成。

第一对ION读取器+写入器仅将原始ION字段直接写入字节数组,并从字节数组读取ION字段。该读写器对使用最快。如果我们需要最大的性能或者灵活性,则应该使用这对读取器/写入器。我们可以在这里阅读更多有关这些的信息:

  • IonWriter
  • IonReader

第二对ION读写器对从字节数组读取Java对象,并将Java对象写入字节数组。这对读写器使用Java Reflection来读取和写入二进制ION数据中的对象字段。基于反射的读取器+编写器不如原始读取器+编写器对快,但使用起来容易得多。我们可以在此处阅读有关基于反射的ION APis的更多信息:

  • IonObjectWriter
  • IonObjectReader

也可以将两组读者和作家结合在一起。例如,我们可以使用原始阅读器遍历大型ION数据集,然后使用基于反射的对象阅读器从其中读取单个对象。或者,在手动编写原始数据和使用基于反射的编写器编写Java对象之间进行切换。

ION API尚未完全适应表面上的这种混合,但是底层实现是考虑到这一点的,因此主要是在公共API中公开此功能。随着时间的流逝,这将得到改善。