gpt4 book ai didi

java - 如何在 java 中解码 ruby​​ 对象?

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:35 27 4
gpt4 key购买 nike

我有一个对象,我想在 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;");

显然这是行不通的,因为 marshal 将检查解码的前 2 个字节并吓坏了,因为它与 jruby 的主要/次要版本不匹配....hrmss..

最佳答案

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

我意识到这可能无法完全回答问题,但它可能是您之前没有想到的可能性!

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

关于java - 如何在 java 中解码 ruby​​ 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com