Hi Gurus,
Is there a way to redirect java.lang.System.out to a RubySocket’s
iostream?
I was trying this with a simple tcp server, where I first had a
$stdout = socket
After which a plain puts() worked and dumped stuff on the other side of
the
socket.
Then, tried to do the same with some java code, calling
java.lang.System.setOut() with these:
a) new_java_out = java.io.PrintStream.new($stdout.to_outputstream,
true)
b) new_java_out = JRuby.runtime.getOutputStream()
so that this would work:
System.out.println(“hi there”)
The problem was I didn’t see anything on the other side, debugging into
this a bit, I see some IOException “not opened for writing”, with the
following trace:
ChannelStream.bufferedWrite(ByteBuffer) line: 1112
ChannelStream.access$700(ChannelStream, ByteBuffer) line: 62
ChannelStream$OutputStreamAdapter.write(byte[], int, int) line: 1640
PrintStream.write(byte[], int, int) line: 480
Note that a doing the above with a file in place of socket worked fine.
Here’s the full source: http://pastie.org/private/rnqqahjb9qeobkcl4ax6a.
Ideas are welcome. Is this a bug in my code or jruby? I was surprised to
see an output stream “not opened for writing”.
Thank you.
Gergo