]> Sergey Matveev's repositories - glocate.git/blobdiff - reader.go
Return zstd back
[glocate.git] / reader.go
index 269fc3295dac975ee17b8a4007c9995da5813562f989a1ff4ce3f92366daa7eb..8900c26a75b3fd91ba83e1d45f9d923436981f3e84a45ea784cb151c474d50b4 100644 (file)
--- a/reader.go
+++ b/reader.go
@@ -1,9 +1,12 @@
 package main
 
 import (
+       "bufio"
        "encoding/binary"
        "io"
        "log"
+
+       "github.com/klauspost/compress/zstd"
 )
 
 func mustReadFull(r io.Reader, buf []byte) {
@@ -12,15 +15,20 @@ func mustReadFull(r io.Reader, buf []byte) {
        }
 }
 
-func reader(r io.Reader, sink chan Ent) {
-       var err error
+func reader(src io.Reader, sink chan Ent) {
+       comp, err := zstd.NewReader(src)
+       if err != nil {
+               log.Fatalln(err)
+       }
+       br := bufio.NewReaderSize(comp, 1<<17)
+
        num := make([]byte, 8)
        var cols []string
        var namePrev string
        var nameLen uint16
        var depth, depthPrev uint8
        for {
-               _, err = io.ReadFull(r, num[:2])
+               _, err = io.ReadFull(br, num[:2])
                if err != nil {
                        if err == io.EOF {
                                break
@@ -29,13 +37,13 @@ func reader(r io.Reader, sink chan Ent) {
                }
                nameLen = binary.BigEndian.Uint16(num[:2])
                nameRaw := make([]byte, nameLen)
-               mustReadFull(r, nameRaw)
+               mustReadFull(br, nameRaw)
                name := string(nameRaw)
-               mustReadFull(r, num[:1])
+               mustReadFull(br, num[:1])
                depth = uint8(num[0])
-               mustReadFull(r, num)
+               mustReadFull(br, num)
                ent := Ent{mtime: int64(binary.BigEndian.Uint64(num))}
-               mustReadFull(r, num)
+               mustReadFull(br, num)
                ent.size = int64(binary.BigEndian.Uint64(num))
                if depth > depthPrev {
                        cols = append(cols, namePrev[:len(namePrev)-1])
@@ -48,4 +56,5 @@ func reader(r io.Reader, sink chan Ent) {
                depthPrev = depth
        }
        close(sink)
+       comp.Close()
 }