Class: Thrift::BufferedTransport

Inherits:
BaseTransport show all
Defined in:
lib/thrift/transport/buffered_transport.rb

Constant Summary collapse

DEFAULT_BUFFER =
4096

Instance Method Summary collapse

Methods inherited from BaseTransport

#read_all, #set_context

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

#closeObject



40
41
42
43
# File 'lib/thrift/transport/buffered_transport.rb', line 40

def close
  flush
  @transport.close
end

#flushObject



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

#openObject



36
37
38
# File 'lib/thrift/transport/buffered_transport.rb', line 36

def open
  @transport.open
end

#open?Boolean

Returns:

  • (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_byteObject



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