From 5782ea9646bf14b619a0c29140df3a4aa9e89e3e Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 6 Oct 2011 17:37:59 -0700 Subject: [PATCH] go/token: document deserialization property FileSet deserialization (Read) uses its own instance of a gob decoder. If the FileSet data may be followed by other data on the reader, Read may consume too much data that is lost unless the reader implements ReadByte. Also: Minor internal refactoring for symmetry. R=r CC=golang-dev https://golang.org/cl/5233041 --- src/pkg/go/token/serialize.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pkg/go/token/serialize.go b/src/pkg/go/token/serialize.go index 80a3323f94..5fb47f7cbb 100644 --- a/src/pkg/go/token/serialize.go +++ b/src/pkg/go/token/serialize.go @@ -24,10 +24,19 @@ type serializedFileSet struct { Files []serializedFile } +func (s *serializedFileSet) Read(r io.Reader) os.Error { + return gob.NewDecoder(r).Decode(s) +} + +func (s *serializedFileSet) Write(w io.Writer) os.Error { + return gob.NewEncoder(w).Encode(s) +} + // Read reads the fileset from r into s; s must not be nil. +// If r does not also implement io.ByteReader, it will be wrapped in a bufio.Reader. func (s *FileSet) Read(r io.Reader) os.Error { var ss serializedFileSet - if err := gob.NewDecoder(r).Decode(&ss); err != nil { + if err := ss.Read(r); err != nil { return err } @@ -58,5 +67,5 @@ func (s *FileSet) Write(w io.Writer) os.Error { ss.Files = files s.mutex.Unlock() - return gob.NewEncoder(w).Encode(ss) + return ss.Write(w) } -- 2.48.1