2011-05-24 71 views
14

我想在JRuby中通过一些Java库和成的JRuby再次传递一个二进制字符串作为byte[],在这里我想把它转换回一个字符串,但我不知道如何做到这一点没有字符串越来越乱了。转换JRuby的字符串的Java字节数组,然后再返回

具体而言,我正在编码一个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[]任何容易/更安全的方法是什么?

回答

22

,我发现自己的答案,原来有一个#to_java_bytesString,以及一个辅助方法.from_java_bytes是处理这种转换没有问题:

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

如前所述,这个工程:

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

相关问题