aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2024-04-12 15:31:43 +0300
committerMarin Ivanov <[email protected]>2024-04-12 15:31:43 +0300
commit94d4455ca13c611d7700e5836ff4082a15216388 (patch)
tree8cfa08170e548b5de3c99b3cdb7a5a7270be5b81
parentaf6c1274c233cffdc27df5cbaf29fbafb92ba5bb (diff)
add buffered reading and writing
-rw-r--r--go.mod5
-rw-r--r--go.sum2
-rw-r--r--main.go13
3 files changed, 16 insertions, 4 deletions
diff --git a/go.mod b/go.mod
index 5bf475a..11123b7 100644
--- a/go.mod
+++ b/go.mod
@@ -2,4 +2,7 @@ module go.metala.org/retaart
go 1.21.5
-require github.com/spf13/pflag v1.0.5
+require (
+ github.com/klauspost/readahead v1.4.0
+ github.com/spf13/pflag v1.0.5
+)
diff --git a/go.sum b/go.sum
index 287f6fa..5c12cd1 100644
--- a/go.sum
+++ b/go.sum
@@ -1,2 +1,4 @@
+github.com/klauspost/readahead v1.4.0 h1:w4hQ3BpdLjBnRQkZyNi+nwdHU7eGP9buTexWK9lU7gY=
+github.com/klauspost/readahead v1.4.0/go.mod h1:7bolpMKhT5LKskLwYXGSDOyA2TYtMFgdgV0Y8gy7QhA=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
diff --git a/main.go b/main.go
index f65b88d..89dba8d 100644
--- a/main.go
+++ b/main.go
@@ -2,11 +2,13 @@ package main
import (
"archive/tar"
+ "bufio"
"io"
"log"
"os"
"path"
+ "github.com/klauspost/readahead"
flag "github.com/spf13/pflag"
)
@@ -32,14 +34,19 @@ func main() {
}
func process(params processParams, logger *Logger) error {
- tr := tar.NewReader(os.Stdin)
- tw := tar.NewWriter(os.Stdout)
+ in := readahead.NewReader(os.Stdin)
+ defer in.Close()
+ out := bufio.NewWriter(os.Stdout)
+ defer out.Flush()
+
+ tr := tar.NewReader(in)
+ tw := tar.NewWriter(out)
defer tw.Close()
for {
hdr, err := tr.Next()
if err == io.EOF {
if params.concatenate {
- tr = tar.NewReader(os.Stdin)
+ tr = tar.NewReader(in)
hdr, err = tr.Next()
if err == io.EOF {
break