java中将字符串顺序反传转_如何在Java中将字符串序列化的Erlang术语反序列化为JInterface对象?...

我的接口系统提供了来自Erlang世界的结果,该结果发送了erlang术语的字符串表示形式,例如元组列表:

[ {"key1" , ["AAA","BBB"] } , {"key2" , ["CCC","DDD"] } ]

在Java中收到此字符串后,我想使用OTP库(com.ericsson.otp.OtpErlangList等)对其进行解析(反序列化)。

我不想直接连接到Erlang OTP或在我的情况下使用Json或Xml(如果可能的话,请尝试尽可能本机处理)。

当我将字符串转换为OtpErlangList时,会得到一个整数列表,因此总的来说,我相信它会简单地转换为字符代码,因为erlang中的字符串是代码列表。看来JInterface中没有反序列化器。如果是这种情况,那么我将不得不使用JSON。

由于OtpErlangObject(以及所有其他子类)具有toString方法,因此必须有一种方法。他们为什么不赋予扭转这种能力(fromString(String str))?

重申:如何从字符串直接将erlang术语字符串表示形式转换为Java中的JInterface对象(无节点连接,与JSON接口等)。

归功于这里的合作是最终答案:

最终的答案很简单,据我所知,没有针对Java(或其他语言)的erlang术语字符串表示反序列化器。但...

1)目前尚无Java接口(包括JInterface)支持从本地字符串术语表示形式反序列化erlang术语

2)Jinterface支持OtpInputStream,但是它期望使用Erlang外部术语格式,如此处所述

3)上面的外部术语格式是二进制数据。必须使用term_to_binary BIF将数据传输到Java接口。

4)一旦数据流回到Java端的OtpErlangObject(使用JInterface),就可以向其内部数据扩展,将OtpErlangObject转换为发送的内容(OtpErlangList,OtpErlangTuple等)

二郎方面:

ExternalFormatBinData = term_to_binary(MyTermToBeSent),

%transmit data using messaging or other media

...

代码的Java端

OtpInputStream otpInputStream = new OtpInputStream(receivedBinaryDataArrayOfBytes)

OtpErlangObject erlangObject = otpInputStream.read_any();

OtpErlangList erlangList = (OtpErlangList) erlangObject // replace OtpErlangList to whatever is being sent

...

我不明白解析Erlang字符串比解析JSON更原生。但是,如果您确实想执行此操作,则可以使用OtpInputStream类,并使用要解析的String的字节数组对其进行初始化。然后调用read_any以获得OtpErlangObject。文档在这里:OtpInputStream。

谢谢。 我实际上尝试过在发布之前,OtpInputStream不起作用,因为它期望用于数据传输的特定erlang格式不同于字符串表示形式。 我更新了显示该示例的问题。 关于为什么我认为这是更原生的原因是,它需要花一些时间才能从erlang生成erlang字符串表示形式,并且构造JInterface erlang对象也具有一个toString()方法,该方法很简单。 在我看来,这比将其桥接到JSON或XML所需的计算更少。

仅仅为了完成我上面的评论,我感到困惑的是,所谓的erlang java接口(JInterface)没有提供文本驱动的序列化方法(它将扩展到更大范围的媒体传输和存储)。 我相信erlang对象格式既强大又紧凑,就像JSON一样。

JInterface不提供AFAIK这样的功能。它旨在通过Erlang内部网络协议与Erlang节点进行通信。在您的情况下,我可能会编写一个类似antlr的解析器。基于语法,您可以构建任何喜欢的对象结构。

您说的是尽可能原生的,没有json等。但是如果您从Java调用erlang,我会使用协议缓冲区或节俭。也有伯特,但我还没有尝试过。我认为这些方法比处理字符串反序列化更安全,并且可以避免您头疼的问题。

查看basho protobuf存储库,了解如何在Erlang中使用probbuff。

https://github.com/metadave/etp会将String转换为Java对象模型(无节点连接,与JSON接口等)。以此为基础,只需在内存表示中构建JInterface模型即可。

The final answer is simply that there is no erlang term string representation deserializer

for Java (or other language) as far as I know.

这就是(上面的)etp项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值