@@ -1,8 +1,9 @@ package main import ( + iou "0dev.org/ioutil" predictor "0dev.org/predictor" "bufio" "fmt" "io" "os" @@ -22,15 +23,15 @@ // Compress the data from the given io.Reader and write it to the given io.Writer // I/O is buffered for better performance func compress(output io.Writer, input io.Reader) int { var ( err error - buffer *bufio.Writer = bufio.NewWriter(output) - compressor io.Writer = predictor.Compressor(buffer) + buffer io.Writer = iou.SizedWriter(output, 4096) + compressor io.Writer = predictor.Compressor(buffer) ) - _, err = io.Copy(compressor, bufio.NewReader(input)) + _, err = io.Copy(compressor, input) if err != nil { fmt.Fprintln(os.Stderr, "Error while compressing.\n", err) return 1 } @@ -40,11 +41,11 @@ fmt.Fprintln(os.Stderr, "Error while flushing compresssor buffer.\n", err) return 1 } // Flush the buffer - err = buffer.Flush() + _, err = buffer.Write(nil) if err != nil { fmt.Fprintln(os.Stderr, "Error while flushing output buffer.\n", err) return 1 } @@ -54,24 +55,24 @@ // Decompress the data from the given io.Reader and write it to the given io.Writer // I/O is buffered for better performance func decompress(output io.Writer, input io.Reader) int { var ( err error - buffer *bufio.Writer = bufio.NewWriter(output) - decompressor io.Reader = predictor.Decompressor(bufio.NewReader(input)) + buffer io.Writer = iou.SizedWriter(output, 4096) + decompressor io.Reader = predictor.Decompressor(bufio.NewReader(input)) ) _, err = io.Copy(buffer, decompressor) if err != nil { fmt.Fprintln(os.Stderr, "Error while decompressing.\n", err) return 1 } - // Flush - err = buffer.Flush() + // Flush the buffer + _, err = buffer.Write(nil) if err != nil { fmt.Fprintln(os.Stderr, "Error while flushing output buffer.\n", err) return 1 } return 0 }