有没有办法在不写入文件的情况下获取内存中 TinkerGraph 的 GraphML 表示?

Is there a way to get GraphML representation of an in-memory TinkerGraph without writing to file?

我有一个内存中的 TinkerGraph。我想编写一个 Spring Boot REST 控制器来公开此 Tinkergraph 的序列化(作为 GraphML)表示。序列化 API (g.io) 需要将字符串文件路径传递给它。目前我必须写入 /tmp 文件,然后读取该文件以获取序列化 GraphML 的字符串表示形式。

有没有办法直接得到序列化GraphML的字符串输出?无需写入 tmp 文件并将其读回?

g.io("graph.xml").write().iterate()

到目前最新的3.4.2版本,恐怕是没有办法用Gremlin语言来实现了。它只写入文件而不写入 Java OutputStream 之类的原因是 io() 步骤与编程语言无关。 Python 和 JVM 之外的其他语言无法构造或指定这样的对象,因此写入文件使其可以全面工作。我不知道这在未来是否会改变,除非我们想出一个合理的 API 可以直观地跨编程语言工作。

由于您使用的是 in-memory TinkerGraph,因此您可以绕过 Gremlin 并回到非常古老的做事方式:

Graph graph = TinkerFactory.createModern();
try (OutputStream os = new FileOutputStream("tinkerpop-modern.xml")) {
    graph.io(IoCore.graphml()).writer().normalize(true).create().writeGraph(os, graph);
}

您只需将 FileOutputStream 替换为您想要使用的任何类型的 OutputStream。这个 approach 使用旧的 Graph API,我认为它在较新的版本中已被弃用,因此您仍然可以使用该选项。请注意,如果您不在 JVM 上,则执行 return 字符串的唯一方法是将 Gremlin 脚本提交到 Gremlin 服务器。