Use io.CopyN to simplify THeaderTransport code
Client: go
In THeaderTransport implementation, use io.CopyN instead of
io.Copy+io.LimitReader.
Underlying io.CopyN is actually implemented with io.Copy+io.LimitReader
[0], but it also does some extra checks we can take advantage of. It
also simplifies the code in thrift repo.
[0]: https://github.com/golang/go/blob/83b181c68bf332ac7948f145f33d128377a09c42/src/io/io.go#L340
diff --git a/lib/go/thrift/header_transport.go b/lib/go/thrift/header_transport.go
index 103741e..85d296d 100644
--- a/lib/go/thrift/header_transport.go
+++ b/lib/go/thrift/header_transport.go
@@ -330,10 +330,7 @@
t.reader.Discard(size32)
// Read the frame fully into frameBuffer.
- _, err = io.Copy(
- &t.frameBuffer,
- io.LimitReader(t.reader, int64(frameSize)),
- )
+ _, err = io.CopyN(&t.frameBuffer, t.reader, int64(frameSize))
if err != nil {
return err
}
@@ -395,7 +392,7 @@
)
}
headerBuf := NewTMemoryBuffer()
- _, err = io.Copy(headerBuf, io.LimitReader(&t.frameBuffer, headerLength))
+ _, err = io.CopyN(headerBuf, &t.frameBuffer, headerLength)
if err != nil {
return err
}