Преобразование строки JRuby в массив байтов Java и обратно
Я пытаюсь передать двоичную строку в 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[]
?
Ответы
Ответ 1
Я сам нашел ответ, оказалось, что есть #to_java_bytes
on String
и вспомогательный метод .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