github.com/jlmeeker/kismatic@v1.10.1-0.20180612190640-57f9005a1f1a/pkg/util/linereader.go (about)

     1  package util
     2  
     3  import (
     4  	"bufio"
     5  	"io"
     6  )
     7  
     8  // LineReader provides a way to read lines of text with arbitrary length.
     9  // The line is buffered in memory.
    10  type LineReader struct {
    11  	reader *bufio.Reader
    12  }
    13  
    14  // NewLineReader returns a LineReader to read from r. It wraps the reader
    15  // with a buffered reader that has a buffer of size bufSizeBytes.
    16  func NewLineReader(r io.Reader, bufSizeBytes int) LineReader {
    17  	return LineReader{bufio.NewReaderSize(r, bufSizeBytes)}
    18  }
    19  
    20  // Read an entire line from the reader.
    21  func (lr LineReader) Read() ([]byte, error) {
    22  	var (
    23  		isPrefix       bool  = true
    24  		err            error = nil
    25  		line, fullLine []byte
    26  	)
    27  	for isPrefix && err == nil { // read until we have the whole line, or we get an err
    28  		line, isPrefix, err = lr.reader.ReadLine()
    29  		fullLine = append(fullLine, line...)
    30  	}
    31  	return fullLine, err
    32  }