From d45170a9336be58d7b31ad3f7c6b1d1f6f53e681 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 7 Jul 2018 20:58:06 +0100 Subject: [PATCH] Simplify HeapDump to use a json.Decoder to stream and parse file --- heap_dump.go | 41 +++++++++-------------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/heap_dump.go b/heap_dump.go index 090451e..39053f4 100644 --- a/heap_dump.go +++ b/heap_dump.go @@ -1,8 +1,7 @@ package main import ( - "bufio" - json "encoding/json" + "encoding/json" "io" "os" ) @@ -31,40 +30,18 @@ func (s *HeapDump) Process() error { s.Entries = map[string]*HeapEntry{} - reader := bufio.NewReader(file) + d := json.NewDecoder(file) for { - line, err := reader.ReadBytes(byte('\n')) - s.ProcessLine(line) - - if err != nil { + var e HeapEntry + if err := d.Decode(&e); err == io.EOF { break + } else if err != nil { + return err } - } - - if err != io.EOF { - return err - } - - return nil -} - -func (s *HeapDump) ProcessLine(line []byte) error { - item, err := s.Parse(line) - if err != nil { - return err - } - - if len(item.Address) > 0 { - index := item.Address + ":" + item.Type - s.Entries[index] = item + index := e.Address + ":" + e.Type + s.Entries[index] = &e s.Index = append(s.Index, index) } + return nil } - -func (s *HeapDump) Parse(itemJSON []byte) (*HeapEntry, error) { - var i HeapEntry - err := json.Unmarshal(itemJSON, &i) - - return &i, err -}