|
|
@@ -8,17 +8,20 @@ import (
|
|
|
"v2ray.com/core/common/errors"
|
|
|
)
|
|
|
|
|
|
+// BufferedWriter is an io.Writer with internal buffer. It writes to underlying writer when buffer is full or on demand.
|
|
|
+// This type is not thread safe.
|
|
|
type BufferedWriter struct {
|
|
|
- writer io.Writer
|
|
|
- buffer *buf.Buffer
|
|
|
- cached bool
|
|
|
+ writer io.Writer
|
|
|
+ buffer *buf.Buffer
|
|
|
+ buffered bool
|
|
|
}
|
|
|
|
|
|
+// NewWriter creates a new BufferedWriter.
|
|
|
func NewWriter(rawWriter io.Writer) *BufferedWriter {
|
|
|
return &BufferedWriter{
|
|
|
- writer: rawWriter,
|
|
|
- buffer: buf.NewSmall(),
|
|
|
- cached: true,
|
|
|
+ writer: rawWriter,
|
|
|
+ buffer: buf.NewSmall(),
|
|
|
+ buffered: true,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -41,7 +44,7 @@ func (v *BufferedWriter) ReadFrom(reader io.Reader) (int64, error) {
|
|
|
}
|
|
|
|
|
|
func (v *BufferedWriter) Write(b []byte) (int, error) {
|
|
|
- if !v.cached || v.buffer == nil {
|
|
|
+ if !v.buffered || v.buffer == nil {
|
|
|
return v.writer.Write(b)
|
|
|
}
|
|
|
nBytes, err := v.buffer.Write(b)
|
|
|
@@ -74,12 +77,12 @@ func (v *BufferedWriter) Flush() error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (v *BufferedWriter) Cached() bool {
|
|
|
- return v.cached
|
|
|
+func (v *BufferedWriter) Buffered() bool {
|
|
|
+ return v.buffered
|
|
|
}
|
|
|
|
|
|
-func (v *BufferedWriter) SetCached(cached bool) {
|
|
|
- v.cached = cached
|
|
|
+func (v *BufferedWriter) SetBuffered(cached bool) {
|
|
|
+ v.buffered = cached
|
|
|
if !cached && !v.buffer.IsEmpty() {
|
|
|
v.Flush()
|
|
|
}
|