Class: StreamReader

Inherits:
javajava::iojava::io::Reader
  • Object
show all
Defined in:
lib/com/microsoft/json-parser.rb

Overview

class JsonParser

Instance Method Summary collapse

Constructor Details

#initialize(logger, reader) ⇒ StreamReader

Returns a new instance of StreamReader.



92
93
94
95
96
97
98
99
100
101
# File 'lib/com/microsoft/json-parser.rb', line 92

def initialize(logger, reader)
  super()
  @logger = logger
  @reader = reader

  @stream_buffer = ""
  @is_full_stream_read = false
  @index = 0
  @stream_buffer_length = 0
end

Instance Method Details

#closeObject



107
108
# File 'lib/com/microsoft/json-parser.rb', line 107

def close
end

#drop_stream(until_offset) ⇒ Object



126
127
128
129
130
131
132
133
134
# File 'lib/com/microsoft/json-parser.rb', line 126

def drop_stream(until_offset)
  @logger.debug("StreamReader::drop_stream until_offset:#{until_offset} index: #{@index}")
  if @index < until_offset
    return
  end
  @stream_buffer = @stream_buffer[until_offset..-1]
  @index = @index - until_offset
  @stream_buffer_length = @stream_buffer_length - until_offset
end

#find(substring, offset) ⇒ Object



122
123
124
# File 'lib/com/microsoft/json-parser.rb', line 122

def find(substring, offset)
  return @stream_buffer.index(substring, offset)
end

#get_cached_stream_indexObject



114
115
116
# File 'lib/com/microsoft/json-parser.rb', line 114

def get_cached_stream_index
  return @index
end

#get_cached_stream_lengthObject



110
111
112
# File 'lib/com/microsoft/json-parser.rb', line 110

def get_cached_stream_length
  return @stream_buffer_length
end

#get_stream_buffer(start_index, end_index) ⇒ Object



118
119
120
# File 'lib/com/microsoft/json-parser.rb', line 118

def get_stream_buffer(start_index, end_index)
  return @stream_buffer[start_index..end_index]
end

#markSupportedObject



103
104
105
# File 'lib/com/microsoft/json-parser.rb', line 103

def markSupported
  return false
end

#read(buf, offset, len) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/com/microsoft/json-parser.rb', line 145

def read(buf, offset, len)
  @logger.debug("StreamReader::read #{offset} #{len}  | stream index: #{@index} stream length: #{@stream_buffer_length}")
  are_all_bytes_available = true
  if @index + len - offset > @stream_buffer_length
    are_all_bytes_available = fill_stream_buffer(@index + len - offset - @stream_buffer_length)
  end

  if (@stream_buffer_length - @index) < len
    len = @stream_buffer_length - @index
    @logger.debug("StreamReader::read #{offset} Actual length: #{len}")
  end

  if len > 0
    #TODO: optimize this
    jv_string = @stream_buffer[@index..@index+len-1].to_java
    jv_bytes_array = jv_string.toCharArray()
    java::lang::System.arraycopy(jv_bytes_array, 0, buf, offset, len)

    @index = @index + len
  end

  if !are_all_bytes_available && len == 0
    @logger.debug("StreamReader::read end of stream")
    return -1
  else
    return len
  end

  rescue java::lang::IndexOutOfBoundsException => e
    @logger.debug("StreamReader::read IndexOutOfBoundsException")
    raise e
  rescue java::lang::ArrayStoreException => e
    @logger.debug("StreamReader::read ArrayStoreException")
    raise e
  rescue java::lang::NullPointerException => e
    @logger.debug("StreamReader::read NullPointerException")
    raise e
end

#reset_cached_stream_index(new_offset) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/com/microsoft/json-parser.rb', line 136

def reset_cached_stream_index(new_offset)
  @logger.debug("StreamReader::reset_cached_stream_index new_offset:#{new_offset} index: #{@index}")
  if new_offset < 0
    return
  end
  @index = new_offset
end