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

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

#closeObject



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

def close
  flush
  @transport.close
end

#flushObject



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

#openObject



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

def open
  @transport.open
end

#open?Boolean

Returns:

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



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_sObject



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