将JRuby字符串转换为Java字节数组,然后再次转换

将JRuby字符串转换为Java字节数组,然后再次转换,jruby,Jruby,我试图将JRuby中的二进制字符串作为byte[]通过某个Java库再次传递到JRuby中,我想将其转换回字符串,但我不知道如何在不弄乱字符串的情况下执行此操作 具体地说,我将Ruby哈希编码为BSON并将其传递给AMQP,但与byte[]之间的转换不起作用。此代码 import org.jruby.RubyString blob = BSON.serialize({'test' => 123123123123}).to_s p blob p RubyString.bytes_to_str

我试图将JRuby中的二进制字符串作为
byte[]
通过某个Java库再次传递到JRuby中,我想将其转换回字符串,但我不知道如何在不弄乱字符串的情况下执行此操作

具体地说,我将Ruby哈希编码为BSON并将其传递给AMQP,但与
byte[]
之间的转换不起作用。此代码

import org.jruby.RubyString
blob = BSON.serialize({'test' => 123123123123}).to_s
p blob
p RubyString.bytes_to_string(RubyString.string_to_bytes(blob))
输出

"\x13\x00\x00\x00\x12test\x00\xB3\xC3\xB5\xAA\x1C\x00\x00\x00\x00"
"\x13\x00\x00\x00\x12test\x00\xC2\xB3\xC3\x83\xC2\xB5\xC2\xAA\x1C\x00\x00\x00\x00"
我也试过了

java.lang.String.new(blob.to_java.bytes).to_s
但它输出相同的、错误的字符串


有没有更简单/更安全的方法来转换JRuby字符串和
字节[]

我自己找到了答案,结果发现
字符串上有一个
\to\u java\u bytes
,还有一个助手方法
。来自
的方法可以毫无问题地处理转换:

blob = BSON.serialize({'test' => 123123123123}).to_s
p blob
p String.from_java_bytes(blob.to_java_bytes)

如前所述,这项工作:

irb(main):002:0> String.from_java_bytes(java_bytes)
=> "\x01\x02\x03"
但这同样有效:

irb(main):003:0> java_bytes.to_s
=> "\x01\x02\x03"

我认为这更合理你能再解释一下吗?如何导入BSON。我无法在BSON上执行它。我想在ruby中将字符串转换为字节数组