编程语言
首页 > 编程语言> > 如何在java中解组ruby对象?

如何在java中解组ruby对象?

作者:互联网

我有一个对象,我想抓住java中的内容.
唯一的问题是目前是ruby.

irb(main):050:0> blah
=> "BAh7ByIeYXV0aGVudGljYXRpb25fc3RyYXRlZ2llczAiCXVzZXJpBg%253D%253D-\
-0cdecf4edfaa5cbe4693c9fb83b204c1256a54a6"

irb(main):049:0> Marshal.load(Base64.decode64(blah))
=> {"authentication_strategies"=>nil, "user"=>1}

我得到了base64部分 – 所以现在一切都以字节为单位.我如何访问第二个字符串?我认为可以用jruby完成一些事情,但我以前从未使用它,也不知道从哪里开始.

让我在这里详细说明我的问题.

1)这些是我试图在tomcat上的servlet和apache上的merb应用程序之间共享的cookie

2)我不打算将它们存储在数据库中.我曾考虑在memcached中使用它们,但由于其他原因我想将它们存储为cookie(是的,我很清楚所涉及的安全隐患)

我目前正在查看jruby的Red Bridge / jruby-embed,但是因为这只是70个字节,所以我需要看一下,我觉得调用所有这些简单的开销是荒谬的.

而不是启动一个新的问题….我现在的代码看起来像这样:

        // using commons
        Base64 b64 = new Base64();
        byte[] decoded = b64.decode(cookie.getValue().getBytes());

        ScriptingContainer container = new ScriptingContainer();
        container.runScriptlet("la = Marshal.load(\"" + decoded + "\"); puts la.to_s;");

显然这不会起作用因为元帅将检查解码的前2个字节并且因为它与jruby的主要/次要版本不匹配而疯狂…. hrmss ..

解决方法:

对于不涉及JRuby的解决方案,为什么不自行序列化您感兴趣的字段?例如,将它们作为原始字符串保存到文件或关系数据库中?

我意识到这可能不能完全回答这个问题但是你可能以前没有想到过!

编辑 – feydr明确表示他不是在谈论将对象数据序列化到文件中.因此,我认为序列化是用于进程间通信的,在这种情况下,通过套接字提供的二进制协议(或任何真正的协议)是一个很好的解决方案并且易于实现.你可能会比查看Google protocol buffers更糟糕(它甚至可以在Java端进行代码生成).

标签:java,ruby,marshalling,jruby
来源: https://codeday.me/bug/20190607/1192111.html