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

问题描述

| 我试图通过一些Java库将JRuby中的二进制字符串作为“ 0”传递给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字符串和
byte[]
进行相互转换?     

解决方法

我自己找到了答案,结果在ѭ7上有一个
#to_java_bytes
,并且一个辅助方法
.from_java_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\"
而且我认为这更明智。 :D