2011-05-24 73 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

相關問題