lib/thrift/transport/buffered_transport.rb in thrift-0.8.0 vs lib/thrift/transport/buffered_transport.rb in thrift-0.9.0
- old
+ new
@@ -22,12 +22,12 @@
class BufferedTransport < BaseTransport
DEFAULT_BUFFER = 4096
def initialize(transport)
@transport = transport
- @wbuf = ''
- @rbuf = ''
+ @wbuf = Bytes.empty_byte_buffer
+ @rbuf = Bytes.empty_byte_buffer
@index = 0
end
def open?
return @transport.open?
@@ -42,16 +42,16 @@
@transport.close
end
def read(sz)
@index += sz
- ret = @rbuf.slice(@index - sz, sz) || ''
+ ret = @rbuf.slice(@index - sz, sz) || Bytes.empty_byte_buffer
if ret.length == 0
@rbuf = @transport.read([sz, DEFAULT_BUFFER].max)
@index = sz
- ret = @rbuf.slice(0, sz) || ''
+ ret = @rbuf.slice(0, sz) || Bytes.empty_byte_buffer
end
ret
end
@@ -63,38 +63,44 @@
end
# The read buffer has some data now, read a single byte. Using get_string_byte() avoids
# allocating a temp string of size 1 unnecessarily.
@index += 1
- return ::Thrift::TransportUtils.get_string_byte(@rbuf, @index - 1)
+ return Bytes.get_string_byte(@rbuf, @index - 1)
end
+ # Reads a number of bytes from the transport into the buffer passed.
+ #
+ # buffer - The String (byte buffer) to write data to; this is assumed to have a BINARY encoding.
+ # size - The number of bytes to read from the transport and write to the buffer.
+ #
+ # Returns the number of bytes read.
def read_into_buffer(buffer, size)
i = 0
while i < size
# If the read buffer is exhausted, try to read up to DEFAULT_BUFFER more bytes into it.
if @index >= @rbuf.size
@rbuf = @transport.read(DEFAULT_BUFFER)
@index = 0
end
# The read buffer has some data now, so copy bytes over to the output buffer.
- byte = ::Thrift::TransportUtils.get_string_byte(@rbuf, @index)
- ::Thrift::TransportUtils.set_string_byte(buffer, i, byte)
+ byte = Bytes.get_string_byte(@rbuf, @index)
+ Bytes.set_string_byte(buffer, i, byte)
@index += 1
i += 1
end
i
end
def write(buf)
- @wbuf << buf
+ @wbuf << Bytes.force_binary_encoding(buf)
end
def flush
- if @wbuf != ''
+ unless @wbuf.empty?
@transport.write(@wbuf)
- @wbuf = ''
+ @wbuf = Bytes.empty_byte_buffer
end
@transport.flush
end
end
\ No newline at end of file