Java input/output streams from Ruby string's backing byte array
---------------------------------------------------------------

                 Key: JRUBY-929
                 URL: http://jira.codehaus.org/browse/JRUBY-929
             Project: JRuby
          Issue Type: New Feature
          Components: Java Integration
    Affects Versions: JRuby 1.x
            Reporter: Bill Dortch


It would be useful to be able to read/write Java input/output streams directly 
from the backing byte array of Ruby strings.  This would avoid unnecessary 
array allocation/copying (one user reports transmitting byte arrays of several 
hundred K derived from Ruby strings).

This functionality could be implemented as methods on String, or in some kind 
of helper class.  Here's what the direct approach might look like:
{code}
ostream = (some kind of java.io.OutputStream)
a_string.to_java_output_stream(ostream) #=> writes the backing bytes to ostream

istream = a_string.to_java_input_stream #=> (some kind of java.io.InputStream)
aJavaApp.readSomeBytes(istream) #=> app reads stream from backing bytes
{code}
This would be easy enough to implement, but some care would need to be taken to 
ensure the integrity of the data.  In the second case, for example, the _very_ 
easy solution would seem to be to wrap the bytes (from the string's ByteList) 
in a ByteArrayInputStream.  But B-A-I-S exposes the underlying array as a 
protected field; if/when we decide how to enable protected field/method access, 
Ruby's lax enforcement of protected/private visibility could lead to problems.  
(But that's a topic for a different issue - see JRUBY-194.)

A related feature that might be useful is the ability to read in a Ruby string 
from a Java input stream:
{code}
istream = (some kind of java.io.InputStream)
a_string = String.from_java_input_stream(istream)
{code}

As I said, there are other ways this functionality could be exposed. But there 
does seem to be a need/desire for this, especially since we really can't 
directly expose the backing bytes of RubyString/ByteList.  

I imagine this would probably all be post-1.0 functionality.

Thoughts?

-Bill

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to