我有一个内存 TinkerGraph。我想编写一个 Spring Boot REST 控制器来公开这个 Tinkergraph 的序列化(作为 GraphML)表示。序列化 API (g.io) 需要将字符串文件路径传递给它。目前,我必须写入 /tmp 文件,然后读取该文件以获取序列化 GraphML 的字符串表示形式。
有没有办法直接获取序列化 GraphML 的字符串输出?无需写入 tmp 文件并将其读回?
g.io("graph.xml").write().iterate()
我有一个内存 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,可以直观地跨编程语言工作。
由于您使用的是内存中的 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
这种方法使用旧的 Graph API,我认为它在较新的版本中已被弃用,因此您应该仍然可以使用该选项。请注意,如果您不在 JVM 上,则返回字符串的唯一方法是将 Gremlin 脚本提交到 Gremlin Server。