Конвертировать строку JRuby в байтовый массив Java и обратно - PullRequest
15 голосов
/ 24 мая 2011

Я пытаюсь передать двоичную строку в JRuby как byte[] через некоторую библиотеку Java и снова в 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[]?

Ответы [ 2 ]

23 голосов
/ 24 мая 2011

Я нашел ответ сам, оказалось, что #to_java_bytes на String и вспомогательный метод .from_java_bytes, который обрабатывает преобразование без проблем:

blob = BSON.serialize({'test' => 123123123123}).to_s
p blob
p String.from_java_bytes(blob.to_java_bytes)
2 голосов
/ 16 мая 2013

Как уже упоминалось, это работает:

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

...