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 }