2011-05-24 6 views
14

मैं कुछ जावा लाइब्रेरी और जेआरबीबी के माध्यम से byte[] के रूप में जेआरबीई में एक बाइनरी स्ट्रिंग पास करने की कोशिश कर रहा हूं, जहां मैं इसे वापस स्ट्रिंग में बदलना चाहता हूं, लेकिन मैं स्ट्रिंग के बिना गड़बड़ किए बिना इसे कैसे किया जाए, यह पता नहीं लगा सकता है।जावा बाइट सरणी में जेआरबीई स्ट्रिंग को कनवर्ट करें, और फिर वापस

विशेष रूप से मैं रूबी हैश को बीएसओएन के रूप में एन्कोड कर रहा हूं और इसे एएमक्यूपी पर पास कर रहा हूं, लेकिन यह 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

मैं इस सवाल का जवाब अपने आप को पाया, String पर निकला वहाँ एक #to_java_bytes था, और एक सहायक विधि .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" 

और मैं तर्क दूंगा कि यह अधिक समझदार है। : डी