Framer does not need to allocate a slice for each execution

This commit is contained in:
Clayton Coleman 2016-05-20 23:58:29 -04:00
parent 159797bac4
commit 470a181846
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3

View File

@ -25,6 +25,7 @@ import (
type lengthDelimitedFrameWriter struct {
w io.Writer
h [4]byte
}
func NewLengthDelimitedFrameWriter(w io.Writer) io.Writer {
@ -34,13 +35,12 @@ func NewLengthDelimitedFrameWriter(w io.Writer) io.Writer {
// Write writes a single frame to the nested writer, prepending it with the length in
// in bytes of data (as a 4 byte, bigendian uint32).
func (w *lengthDelimitedFrameWriter) Write(data []byte) (int, error) {
header := [4]byte{}
binary.BigEndian.PutUint32(header[:], uint32(len(data)))
n, err := w.w.Write(header[:])
binary.BigEndian.PutUint32(w.h[:], uint32(len(data)))
n, err := w.w.Write(w.h[:])
if err != nil {
return 0, err
}
if n != len(header) {
if n != len(w.h) {
return 0, io.ErrShortWrite
}
return w.w.Write(data)