github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/iox/iox.go (about)

     1  package iox
     2  
     3  import (
     4  	"bufio"
     5  	"io"
     6  	"log"
     7  )
     8  
     9  type BufioWriteCloser struct {
    10  	closer io.WriteCloser
    11  	*bufio.Writer
    12  }
    13  
    14  func NewBufioWriteCloser(w io.WriteCloser) *BufioWriteCloser {
    15  	return &BufioWriteCloser{closer: w, Writer: bufio.NewWriter(w)}
    16  }
    17  
    18  func (b *BufioWriteCloser) Close() error {
    19  	_ = b.Writer.Flush()
    20  	return b.closer.Close()
    21  }
    22  
    23  func ReadString(r io.Reader) string {
    24  	return string(ReadBytes(r))
    25  }
    26  
    27  func ReadBytes(r io.Reader) []byte {
    28  	data, err := io.ReadAll(r)
    29  	if err != nil {
    30  		log.Printf("read bytes failed: %v", err)
    31  	}
    32  
    33  	return data
    34  }
    35  
    36  // DiscardClose discards the reader and then close it.
    37  func DiscardClose(c io.ReadCloser) {
    38  	if c != nil {
    39  		_, _ = io.Copy(io.Discard, c)
    40  		Close(c)
    41  	}
    42  }