1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00
puma--puma/lib/puma/java_io_buffer.rb
schneems 88e51fb08e Freeze all the strings!
Reduces runtime allocation by freezing string literals by default.

We could also remove a ton of manual `.freeze` calls, however the ruby supported version is 2.2 and the magic comment only targets 2.3+.
2018-09-17 11:41:14 -05:00

47 lines
813 B
Ruby

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