def append(self, key, value): if type(key) != self._key_class: raise IOError("Wrong key class %s is not %s" % (type(key), self._key_class)) if type(value) != self._value_class: raise IOError("Wrong Value class %s is not %s" % (type(key), self._key_class)) key_buffer = DataOutputBuffer() key.write(key_buffer) value_buffer = DataOutputBuffer() value.write(value_buffer) self.appendRaw(key_buffer.toByteArray(), value_buffer.toByteArray())
def appendRaw(self, key, value): if self._block_compress: if self._block: records, keys_len, keys, values_len, values = self._block else: keys_len = DataOutputBuffer() keys = DataOutputBuffer() values_len = DataOutputBuffer() values = DataOutputBuffer() records = 0 writeVInt(keys_len, len(key)) keys.write(key) writeVInt(values_len, len(value)) values.write(value) records += 1 self._block = (records, keys_len, keys, values_len, values) current_block_size = keys.getSize() + values.getSize() if current_block_size >= self.COMPRESSION_BLOCK_SIZE: self.sync() else: if self._compress: value = self._codec.compress(value) key_length = len(key) value_length = len(value) self._checkAndWriteSync() self._stream.writeInt(key_length + value_length) self._stream.writeInt(key_length) self._stream.write(key) self._stream.write(value)