2012-08-12 00:42:46 -04:00
|
|
|
require 'java'
|
|
|
|
|
|
|
|
# Conservative native JRuby/Java implementation of IOBuffer
|
|
|
|
# backed by a ByteArrayOutputStream and conversion between
|
|
|
|
# Ruby String and Java bytes
|
2012-08-11 18:20:38 -04:00
|
|
|
module Puma
|
2012-08-12 00:42:46 -04:00
|
|
|
class JavaIOBuffer < java.io.ByteArrayOutputStream
|
|
|
|
field_reader :buf
|
|
|
|
end
|
|
|
|
|
2012-08-11 18:20:38 -04:00
|
|
|
class IOBuffer
|
2012-08-12 00:42:46 -04:00
|
|
|
BUF_DEFAULT_SIZE = 4096
|
|
|
|
|
2012-08-11 18:20:38 -04:00
|
|
|
def initialize
|
2012-08-12 00:42:46 -04:00
|
|
|
@buf = JavaIOBuffer.new(BUF_DEFAULT_SIZE)
|
2012-08-11 18:20:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def reset
|
2012-08-12 00:42:46 -04:00
|
|
|
@buf.reset
|
2012-08-11 18:20:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def <<(str)
|
2012-08-12 00:42:46 -04:00
|
|
|
bytes = str.to_java_bytes
|
|
|
|
@buf.write(bytes, 0, bytes.length)
|
2012-08-11 18:20:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def append(*strs)
|
2012-08-12 00:42:46 -04:00
|
|
|
strs.each { |s| self << s; }
|
2012-08-11 18:20:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def to_s
|
2012-08-12 00:42:46 -04:00
|
|
|
String.from_java_bytes @buf.to_byte_array
|
2012-08-11 18:20:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
alias_method :to_str, :to_s
|
|
|
|
|
|
|
|
def used
|
|
|
|
@buf.size
|
|
|
|
end
|
|
|
|
|
|
|
|
def capacity
|
2012-08-12 00:42:46 -04:00
|
|
|
@buf.buf.length
|
2012-08-11 18:20:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|