From e5abf51296fa1405c4a6314eafc1b97d247c5b60 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 25 Jul 2026 14:03:03 +0900 Subject: internal/pkg: decompress xz streams This uses a port of the public domain xz implementation. Signed-off-by: Ophestra --- internal/xz/example_test.go | 95 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 internal/xz/example_test.go (limited to 'internal/xz/example_test.go') diff --git a/internal/xz/example_test.go b/internal/xz/example_test.go new file mode 100644 index 00000000..56518761 --- /dev/null +++ b/internal/xz/example_test.go @@ -0,0 +1,95 @@ +/* + * Package xz examples + * + * Author: Michael Cross + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +package xz_test + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "path/filepath" + + "hakurei.app/internal/xz" +) + +func ExampleNewReader() { + // load some XZ data into memory + data, err := ioutil.ReadFile( + filepath.Join("testdata", "xz-utils", "good-1-check-sha256.xz")) + if err != nil { + log.Fatal(err) + } + // create an xz.Reader to decompress the data + r, err := xz.NewReader(bytes.NewReader(data), 0) + if err != nil { + log.Fatal(err) + } + // write the decompressed data to os.Stdout + _, err = io.Copy(os.Stdout, r) + if err != nil { + log.Fatal(err) + } + // Output: + // Hello + // World! +} + +func ExampleReader_Multistream() { + // load some XZ data into memory + data, err := ioutil.ReadFile( + filepath.Join("testdata", "xz-utils", "good-1-check-sha256.xz")) + if err != nil { + log.Fatal(err) + } + // create a MultiReader that will read the data twice + mr := io.MultiReader(bytes.NewReader(data), bytes.NewReader(data)) + // create an xz.Reader from the MultiReader + r, err := xz.NewReader(mr, 0) + if err != nil { + log.Fatal(err) + } + // set Multistream mode to false + r.Multistream(false) + // decompress the first stream + _, err = io.Copy(os.Stdout, r) + if err != nil { + log.Fatal(err) + } + fmt.Println("Read first stream") + // reset the XZ reader so it is ready to read the second stream + err = r.Reset(nil) + if err != nil { + log.Fatal(err) + } + // set Multistream mode to false again + r.Multistream(false) + // decompress the second stream + _, err = io.Copy(os.Stdout, r) + if err != nil { + log.Fatal(err) + } + fmt.Println("Read second stream") + // reset the XZ reader so it is ready to read further streams + err = r.Reset(nil) + // confirm that the second stream was the last one + if err == io.EOF { + fmt.Println("No more streams") + } + // Output: + // Hello + // World! + // Read first stream + // Hello + // World! + // Read second stream + // No more streams +} -- cgit v1.3.1