From 264e9426b9647bb4cc8956128c4e6d687fa831da Mon Sep 17 00:00:00 2001 From: Kevin Clark Date: Thu, 26 Mar 2009 03:46:58 +0000 Subject: [PATCH] THRIFT-401. rb: Speed up FramedTransport Author: Tyler Kovacs git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@758510 13f79535-47bb-0310-9956-ffa450edef68 --- lib/rb/lib/thrift/transport.rb | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/rb/lib/thrift/transport.rb b/lib/rb/lib/thrift/transport.rb index 503c6dd0..4aa50d03 100644 --- a/lib/rb/lib/thrift/transport.rb +++ b/lib/rb/lib/thrift/transport.rb @@ -91,6 +91,7 @@ module Thrift @transport = transport @wbuf = '' @rbuf = '' + @index = 0 end def open? @@ -107,13 +108,16 @@ module Thrift end def read(sz) - ret = @rbuf.slice!(0...sz) + @index += sz + ret = @rbuf.slice(@index - sz, sz) || '' + if ret.length == 0 - @rbuf = @transport.read([sz, DEFAULT_BUFFER].max) - @rbuf.slice!(0...sz) - else - ret + @rbuf = @transport.read([sz, DEFAULT_BUFFER].max) + @index = sz + ret = @rbuf.slice(0, sz) || '' end + + ret end def write(buf) @@ -143,6 +147,7 @@ module Thrift @wbuf = '' @read = read @write = write + @index = 0 end def open? @@ -162,9 +167,10 @@ module Thrift return '' if sz <= 0 - read_frame if @rbuf.empty? + read_frame if @index >= @rbuf.length - @rbuf.slice!(0, sz) + @index += sz + @rbuf.slice(@index - sz, sz) || '' end def write(buf,sz=nil) @@ -192,7 +198,8 @@ module Thrift def read_frame sz = @transport.read_all(4).unpack('N').first - @rbuf = @transport.read_all(sz).dup # protect against later #slice! + @index = 0 + @rbuf = @transport.read_all(sz) end end -- 2.17.1