|  | @@ -23,15 +23,19 @@ const xlSize = 128 * 1024
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (r *BytesToBufferReader) readSmall() (MultiBuffer, error) {
 |  |  func (r *BytesToBufferReader) readSmall() (MultiBuffer, error) {
 | 
											
												
													
														|  |  	b := New()
 |  |  	b := New()
 | 
											
												
													
														|  | -	err := b.Reset(ReadFrom(r.Reader))
 |  | 
 | 
											
												
													
														|  | -	if b.IsFull() {
 |  | 
 | 
											
												
													
														|  | -		r.buffer = newBytes(Size + 1)
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -	if !b.IsEmpty() {
 |  | 
 | 
											
												
													
														|  | -		return NewMultiBufferValue(b), nil
 |  | 
 | 
											
												
													
														|  | 
 |  | +	for {
 | 
											
												
													
														|  | 
 |  | +		err := b.Reset(ReadFrom(r.Reader))
 | 
											
												
													
														|  | 
 |  | +		if b.IsFull() {
 | 
											
												
													
														|  | 
 |  | +			r.buffer = newBytes(Size + 1)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if !b.IsEmpty() {
 | 
											
												
													
														|  | 
 |  | +			return NewMultiBufferValue(b), nil
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			b.Release()
 | 
											
												
													
														|  | 
 |  | +			return nil, err
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | -	b.Release()
 |  | 
 | 
											
												
													
														|  | -	return nil, err
 |  | 
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  // ReadMultiBuffer implements Reader.
 |  |  // ReadMultiBuffer implements Reader.
 | 
											
										
											
												
													
														|  | @@ -40,22 +44,26 @@ func (r *BytesToBufferReader) ReadMultiBuffer() (MultiBuffer, error) {
 | 
											
												
													
														|  |  		return r.readSmall()
 |  |  		return r.readSmall()
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	nBytes, err := r.Reader.Read(r.buffer)
 |  | 
 | 
											
												
													
														|  | -	if nBytes > 0 {
 |  | 
 | 
											
												
													
														|  | -		mb := NewMultiBufferCap(nBytes/Size + 1)
 |  | 
 | 
											
												
													
														|  | -		mb.Write(r.buffer[:nBytes])
 |  | 
 | 
											
												
													
														|  | -		if nBytes == len(r.buffer) && nBytes < xlSize {
 |  | 
 | 
											
												
													
														|  | -			freeBytes(r.buffer)
 |  | 
 | 
											
												
													
														|  | -			r.buffer = newBytes(uint32(nBytes) + 1)
 |  | 
 | 
											
												
													
														|  | -		} else if nBytes < Size {
 |  | 
 | 
											
												
													
														|  | 
 |  | +	for {
 | 
											
												
													
														|  | 
 |  | +		nBytes, err := r.Reader.Read(r.buffer)
 | 
											
												
													
														|  | 
 |  | +		if nBytes > 0 {
 | 
											
												
													
														|  | 
 |  | +			mb := NewMultiBufferCap(nBytes/Size + 1)
 | 
											
												
													
														|  | 
 |  | +			mb.Write(r.buffer[:nBytes])
 | 
											
												
													
														|  | 
 |  | +			if nBytes == len(r.buffer) && nBytes < xlSize {
 | 
											
												
													
														|  | 
 |  | +				freeBytes(r.buffer)
 | 
											
												
													
														|  | 
 |  | +				r.buffer = newBytes(uint32(nBytes) + 1)
 | 
											
												
													
														|  | 
 |  | +			} else if nBytes < Size {
 | 
											
												
													
														|  | 
 |  | +				freeBytes(r.buffer)
 | 
											
												
													
														|  | 
 |  | +				r.buffer = nil
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +			return mb, nil
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  |  			freeBytes(r.buffer)
 |  |  			freeBytes(r.buffer)
 | 
											
												
													
														|  |  			r.buffer = nil
 |  |  			r.buffer = nil
 | 
											
												
													
														|  | 
 |  | +			return nil, err
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  | -		return mb, nil
 |  | 
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | -	freeBytes(r.buffer)
 |  | 
 | 
											
												
													
														|  | -	r.buffer = nil
 |  | 
 | 
											
												
													
														|  | -	return nil, err
 |  | 
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  // BufferedReader is a Reader that keeps its internal buffer.
 |  |  // BufferedReader is a Reader that keeps its internal buffer.
 |