日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時間:2023/12/10 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中将字符串顺序反传转_如何在Java中将字符串序列化的Erlang术语反序列化为JInterface对象?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我的接口系統(tǒng)提供了來自Erlang世界的結(jié)果,該結(jié)果發(fā)送了erlang術(shù)語的字符串表示形式,例如元組列表:

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

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

我不想直接連接到Erlang OTP或在我的情況下使用Json或Xml(如果可能的話,請嘗試盡可能本機處理)。

當我將字符串轉(zhuǎn)換為OtpErlangList時,會得到一個整數(shù)列表,因此總的來說,我相信它會簡單地轉(zhuǎn)換為字符代碼,因為erlang中的字符串是代碼列表。看來JInterface中沒有反序列化器。如果是這種情況,那么我將不得不使用JSON。

由于OtpErlangObject(以及所有其他子類)具有toString方法,因此必須有一種方法。他們?yōu)槭裁床毁x予扭轉(zhuǎn)這種能力(fromString(String str))?

重申:如何從字符串直接將erlang術(shù)語字符串表示形式轉(zhuǎn)換為Java中的JInterface對象(無節(jié)點連接,與JSON接口等)。

歸功于這里的合作是最終答案:

最終的答案很簡單,據(jù)我所知,沒有針對Java(或其他語言)的erlang術(shù)語字符串表示反序列化器。但...

1)目前尚無Java接口(包括JInterface)支持從本地字符串術(shù)語表示形式反序列化erlang術(shù)語

2)Jinterface支持OtpInputStream,但是它期望使用Erlang外部術(shù)語格式,如此處所述

3)上面的外部術(shù)語格式是二進制數(shù)據(jù)。必須使用term_to_binary BIF將數(shù)據(jù)傳輸?shù)絁ava接口。

4)一旦數(shù)據(jù)流回到Java端的OtpErlangObject(使用JInterface),就可以向其內(nèi)部數(shù)據(jù)擴展,將OtpErlangObject轉(zhuǎn)換為發(fā)送的內(nèi)容(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更原生。但是,如果您確實想執(zhí)行此操作,則可以使用OtpInputStream類,并使用要解析的String的字節(jié)數(shù)組對其進行初始化。然后調(diào)用read_any以獲得OtpErlangObject。文檔在這里:OtpInputStream。

謝謝。 我實際上嘗試過在發(fā)布之前,OtpInputStream不起作用,因為它期望用于數(shù)據(jù)傳輸?shù)奶囟╡rlang格式不同于字符串表示形式。 我更新了顯示該示例的問題。 關(guān)于為什么我認為這是更原生的原因是,它需要花一些時間才能從erlang生成erlang字符串表示形式,并且構(gòu)造JInterface erlang對象也具有一個toString()方法,該方法很簡單。 在我看來,這比將其橋接到JSON或XML所需的計算更少。

僅僅為了完成我上面的評論,我感到困惑的是,所謂的erlang java接口(JInterface)沒有提供文本驅(qū)動的序列化方法(它將擴展到更大范圍的媒體傳輸和存儲)。 我相信erlang對象格式既強大又緊湊,就像JSON一樣。

JInterface不提供AFAIK這樣的功能。它旨在通過Erlang內(nèi)部網(wǎng)絡(luò)協(xié)議與Erlang節(jié)點進行通信。在您的情況下,我可能會編寫一個類似antlr的解析器。基于語法,您可以構(gòu)建任何喜歡的對象結(jié)構(gòu)。

您說的是盡可能原生的,沒有json等。但是如果您從Java調(diào)用erlang,我會使用協(xié)議緩沖區(qū)或節(jié)儉。也有伯特,但我還沒有嘗試過。我認為這些方法比處理字符串反序列化更安全,并且可以避免您頭疼的問題。

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

https://github.com/metadave/etp會將String轉(zhuǎn)換為Java對象模型(無節(jié)點連接,與JSON接口等)。以此為基礎(chǔ),只需在內(nèi)存表示中構(gòu)建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項目。

總結(jié)

以上是生活随笔為你收集整理的java中将字符串顺序反传转_如何在Java中将字符串序列化的Erlang术语反序列化为JInterface对象?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。