Class: Thrift::BufferedTransport
- Inherits:
-
BaseTransport
- Object
- BaseTransport
- Thrift::BufferedTransport
- Defined in:
- lib/thrift/transport/buffered_transport.rb
Constant Summary collapse
- DEFAULT_BUFFER =
4096
Instance Method Summary collapse
- #close ⇒ Object
- #flush ⇒ Object
-
#initialize(transport) ⇒ BufferedTransport
constructor
A new instance of BufferedTransport.
- #open ⇒ Object
- #open? ⇒ Boolean
- #read(sz) ⇒ Object
- #read_byte ⇒ Object
-
#read_into_buffer(buffer, size) ⇒ Object
Reads a number of bytes from the transport into the buffer passed.
- #to_s ⇒ Object
- #write(buf) ⇒ Object
Methods inherited from BaseTransport
Constructor Details
#initialize(transport) ⇒ BufferedTransport
Returns a new instance of BufferedTransport.
26 27 28 29 30 31 |
# File 'lib/thrift/transport/buffered_transport.rb', line 26 def initialize(transport) @transport = transport @wbuf = Bytes.empty_byte_buffer @rbuf = Bytes.empty_byte_buffer @index = 0 end |
Instance Method Details
#close ⇒ Object
41 42 43 44 |
# File 'lib/thrift/transport/buffered_transport.rb', line 41 def close flush @transport.close end |
#flush ⇒ Object
100 101 102 103 104 105 106 107 |
# File 'lib/thrift/transport/buffered_transport.rb', line 100 def flush unless @wbuf.empty? @transport.write(@wbuf) @wbuf = Bytes.empty_byte_buffer end @transport.flush end |
#open ⇒ Object
37 38 39 |
# File 'lib/thrift/transport/buffered_transport.rb', line 37 def open @transport.open end |
#open? ⇒ Boolean
33 34 35 |
# File 'lib/thrift/transport/buffered_transport.rb', line 33 def open? return @transport.open? end |
#read(sz) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/thrift/transport/buffered_transport.rb', line 46 def read(sz) @index += 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) || Bytes.empty_byte_buffer end ret end |
#read_byte ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/thrift/transport/buffered_transport.rb', line 59 def read_byte # 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, read a single byte. Using get_string_byte() avoids # allocating a temp string of size 1 unnecessarily. @index += 1 return Bytes.get_string_byte(@rbuf, @index - 1) end |
#read_into_buffer(buffer, size) ⇒ Object
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.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/thrift/transport/buffered_transport.rb', line 78 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 = Bytes.get_string_byte(@rbuf, @index) Bytes.set_string_byte(buffer, i, byte) @index += 1 i += 1 end i end |
#to_s ⇒ Object
109 110 111 |
# File 'lib/thrift/transport/buffered_transport.rb', line 109 def to_s "buffered(#{@transport.to_s})" end |
#write(buf) ⇒ Object
96 97 98 |
# File 'lib/thrift/transport/buffered_transport.rb', line 96 def write(buf) @wbuf << Bytes.force_binary_encoding(buf) end |