buffer msgio
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Jun 2, 2015 at 11:47 UTC
4f34e0ec13e121e2db5c9352771d04c55377b539
1 file changed
+11
-4
Godeps/_workspace/src/github.com/jbenet/go-msgio/msgio.go
+11
-4
@@ -1,6 +1,7 @@
1
package msgio
2
3
import (
4
+ "bufio"
5
"errors"
6
"io"
7
"sync"
@@ -75,7 +76,8 @@ type ReadWriteCloser interface {
76
77
// writer is the underlying type that implements the Writer interface.
78
type writer struct {
78
- W io.Writer
79
+ W io.Writer
80
+ buf *bufio.Writer
81
82
lock sync.Locker
83
}
@@ -83,7 +85,7 @@ type writer struct {
85
// NewWriter wraps an io.Writer with a msgio framed writer. The msgio.Writer
86
// will write the length prefix of every message written.
87
func NewWriter(w io.Writer) WriteCloser {
86
- return &writer{W: w, lock: new(sync.Mutex)}
88
+ return &writer{W: w, buf: bufio.NewWriter(w), lock: new(sync.Mutex)}
89
}
90
91
func (s *writer) Write(msg []byte) (int, error) {
@@ -100,8 +102,13 @@ func (s *writer) WriteMsg(msg []byte) (err error) {
102
if err := WriteLen(s.W, len(msg)); err != nil {
103
return err
104
}
103
- _, err = s.W.Write(msg)
104
- return err
105
+
106
+ _, err = s.buf.Write(msg)
107
+ if err != nil {
108
+ return err
109
+ }
110
+
111
+ return s.buf.Flush()
112
}
113
114
func (s *writer) Close() error {