2011-05-24 36 views
14

Estoy tratando de pasar una cadena binaria en JRuby como una byte[] a través de alguna biblioteca Java y en JRuby nuevamente, donde quiero convertirla nuevamente en una cadena, pero no puede entender cómo hacerlo sin que la cuerda se ensucie.Convertir cadena JRuby a matriz de bytes Java, y viceversa

Específicamente estoy codificando un hash Ruby como BSON y pasándolo sobre AMQP, pero es la conversión ay de byte[] que no funciona. Este código

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

salidas

"\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" 

también he intentado

java.lang.String.new(blob.to_java.bytes).to_s 

pero da salida a la misma, mal, cadena.

¿Hay alguna forma más fácil/segura de convertir ay desde una cadena JRuby y byte[]?

Respuesta

22

he encontrado la respuesta a mí mismo, resultó que había un #to_java_bytes en String, y un método de ayuda .from_java_bytes que se encargan de la conversión sin descendencia:

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

Como ya se mencionó, esto funciona:

irb(main):002:0> String.from_java_bytes(java_bytes) 
=> "\x01\x02\x03" 

Pero esto también funciona:

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

Y yo diría que es más sensato. : D

Cuestiones relacionadas