2011-05-24 21 views
14

JRuby'de bir ikili dizeyi bir Java kütüphanesi aracılığıyla ve tekrar JRuby içinde bir dizeye dönüştürmek istediğim bir byte[] olarak geçmeye çalışıyorum. sicim bozukluğu olmadan nasıl yapılacağını anlayamıyorum.JRuby dizgisini Java bayt dizisine dönüştürme ve tekrar geri dönme

Özellikle Ruby hash'ını BSON olarak kodlayıp AMQP üzerinden geçiriyorum, ancak bu, çalışmayan byte[] arası ve bu dönüşümden geliyor. Bu kod

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

çıkışları

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

Ben de

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

denedi ama aynı yanlış, dizge çıktılar.

Bir JRuby dizgisine ve byte[] ürününe dönüştürmekten daha kolay/güvenli bir yol var mı?

cevap

22

kendim cevap buldu String bir #to_java_bytes orada ortaya çıktı ve sorun olmadan dönüşüm işlemek, yardımcı bir yöntem .from_java_bytes: Daha önce bahsedildiği gibi

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

, bu çalışır:

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

Ama bu da çalışır:

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

Ve ben daha mantıklı olduğunu iddia ediyorum. : D

İlgili konular