我在JRuby中爲Java庫編寫簡單的DSL。一些在JRuby中創建的對象被傳遞給Java代碼,處理並返回給JRuby。我正在使用JRuby 1.7.8。使用Java代碼序列化JRuby對象
在某些點在處理JRuby中創建的對象需要被串行化,並通過Java庫反序列化(執行深度克隆)。這是問題發生的地方。來自String和一個普通對象的Appart似乎無法在JRuby中創建的Java對象中進行序列化。
例如,當序列化到一個空的Hash對象,我得到:
IOError: org.jruby.RubyHash$RubyHashEntry
load at org/jruby/RubyKernel.java:1103
at /usr/local/rvm/gems/jruby-1.7.8/bin/pry:23
eval at org/jruby/RubyKernel.java:1123
(root) at /usr/local/rvm/gems/jruby-1.7.8/bin/jruby_executable_hooks:15
爲[ "asd" ]
我得到:
IOError: org.jcodings.specific.UTF8Encoding
load at org/jruby/RubyKernel.java:1103
at /usr/local/rvm/gems/jruby-1.7.8/bin/pry:23
eval at org/jruby/RubyKernel.java:1123
(root) at /usr/local/rvm/gems/jruby-1.7.8/bin/jruby_executable_hooks:15
我發現一些職位,它(如here和here),但他們都很古老,並沒有解釋未來計劃的任何內容。在考慮Ruby和Java的集成時,我認爲這是一個重要的限制。
現在我在序列化Ruby端我的對象,JSON和JSON從反序列化他們返回時,他們。它可以工作,但這會帶來顯着的效率損失。
所以問題是:
- 是否有可能以某種方式使紅寶石的Java對象序列化?如果不是,將來有可能嗎?
- 有沒有人現在更好(更快)的解決方法,然後我上面描述的JSON解決方案?
編輯:
This規範JRuby中回購表明,有一些事情有關序列化。但是,它仍然2歲,並沒有解釋其他對象的系列化政策。
Ouch,使用序列化克隆聽起來很痛苦。我對Ruby一無所知,但也許只是自己編碼吧?比如,用反射遞歸地返回所有數據的克隆(仍然很痛苦)?仍然應該快得多。 – tilpner
克隆是在Java中,而不是在Ruby中。這是一個完全不同的討論,但序列化是如何完成的。序列化解決方案推薦使用很長時間。參見第45頁本書(舊參考):https://github.com/FelixRovinVincent/reference/blob/master/Design%20Patterns/The%20Design%20Patterns%20Java%20Companion.pdf或如這個問題:http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java – wrzasa
可能被一些人推薦,但它仍然在我的程序/應用程序中,即使考慮(對不起,這只是奇怪)而感到噁心。你可能不想看看[這個項目](http://code.google.com/p/cloning/)。 – tilpner