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.
- #write(buf) ⇒ Object
Methods inherited from BaseTransport
Constructor Details
#initialize(transport) ⇒ BufferedTransport
Returns a new instance of BufferedTransport.
25 26 27 28 29 30 |
# File 'lib/thrift/transport/buffered_transport.rb', line 25 def initialize(transport) @transport = transport @wbuf = Bytes.empty_byte_buffer @rbuf = Bytes.empty_byte_buffer @index = 0 end |
Instance Method Details
#close ⇒ Object
40 41 42 43 |
# File 'lib/thrift/transport/buffered_transport.rb', line 40 def close flush @transport.close end |
#flush ⇒ Object
99 100 101 102 103 104 105 106 |
# File 'lib/thrift/transport/buffered_transport.rb', line 99 def flush unless @wbuf.empty? @transport.write(@wbuf) @wbuf = Bytes.empty_byte_buffer end @transport.flush end |
#open ⇒ Object
36 37 38 |
# File 'lib/thrift/transport/buffered_transport.rb', line 36 def open @transport.open end |
#open? ⇒ Boolean
32 33 34 |
# File 'lib/thrift/transport/buffered_transport.rb', line 32 def open? return @transport.open? end |
#read(sz) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/thrift/transport/buffered_transport.rb', line 45 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
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/thrift/transport/buffered_transport.rb', line 58 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.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/thrift/transport/buffered_transport.rb', line 77 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 |
#write(buf) ⇒ Object
95 96 97 |
# File 'lib/thrift/transport/buffered_transport.rb', line 95 def write(buf) @wbuf << Bytes.force_binary_encoding(buf) end |