| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package runtime
- import (
- "bufio"
- "io"
- "net/http"
- )
- // DefaultBufferSize is the default size of buffers. It is set to 4KB by default, which is the
- // same as the default buffer size of bufio.Writer.
- var DefaultBufferSize = 4 * 1024 // 4KB
- // Buffer is a wrapper around bufio.Writer that enables flushing and closing of
- // the underlying writer.
- type Buffer struct {
- Underlying io.Writer
- b *bufio.Writer
- }
- // Write the contents of p into the buffer.
- func (b *Buffer) Write(p []byte) (n int, err error) {
- return b.b.Write(p)
- }
- // Flush writes any buffered data to the underlying io.Writer and
- // calls the Flush method of the underlying http.Flusher if it implements it.
- func (b *Buffer) Flush() error {
- if err := b.b.Flush(); err != nil {
- return err
- }
- if f, ok := b.Underlying.(http.Flusher); ok {
- f.Flush()
- }
- return nil
- }
- // Close closes the buffer and the underlying io.Writer if it implements io.Closer.
- func (b *Buffer) Close() error {
- if c, ok := b.Underlying.(io.Closer); ok {
- return c.Close()
- }
- return nil
- }
- // Reset sets the underlying io.Writer to w and resets the buffer.
- func (b *Buffer) Reset(w io.Writer) {
- if b.b == nil {
- b.b = bufio.NewWriterSize(b, DefaultBufferSize)
- }
- b.Underlying = w
- b.b.Reset(w)
- }
- // Size returns the size of the underlying buffer in bytes.
- func (b *Buffer) Size() int {
- return b.b.Size()
- }
- // WriteString writes the contents of s into the buffer.
- func (b *Buffer) WriteString(s string) (n int, err error) {
- return b.b.WriteString(s)
- }
|