作者:wayf-d
项目:gosam
// Deflate utility that compresses a string using the flate algo
func Deflate(inflated string) []byte {
var b bytes.Buffer
w, _ := flate.NewWriter(&b, -1)
w.Write([]byte(inflated))
w.Close()
return b.Bytes()
}
作者:Neek
项目:beeg
func (output *BeegoOutput) Body(content []byte) {
output_writer := output.res.(io.Writer)
if output.EnableGzip == true && output.Context.Input.Header("Accept-Encoding") != "" {
splitted := strings.SplitN(output.Context.Input.Header("Accept-Encoding"), ",", -1)
encodings := make([]string, len(splitted))
for i, val := range splitted {
encodings[i] = strings.TrimSpace(val)
}
for _, val := range encodings {
if val == "gzip" {
output.Header("Content-Encoding", "gzip")
output_writer, _ = gzip.NewWriterLevel(output.res, gzip.BestSpeed)
break
} else if val == "deflate" {
output.Header("Content-Encoding", "deflate")
output_writer, _ = flate.NewWriter(output.res, flate.BestSpeed)
break
}
}
} else {
output.Header("Content-Length", strconv.Itoa(len(content)))
}
output_writer.Write(content)
switch output_writer.(type) {
case *gzip.Writer:
output_writer.(*gzip.Writer).Close()
case *flate.Writer:
output_writer.(*flate.Writer).Close()
}
}
作者:rogpepp
项目:zi
func ExampleWriter_RegisterCompressor() {
// Override the default Deflate compressor with a higher compression
// level.
// Create a buffer to write our archive to.
buf := new(bytes.Buffer)
// Create a new zip archive.
w := zip.NewWriter(buf)
var fw *flate.Writer
// Register the deflator.
w.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
var err error
if fw == nil {
// Creating a flate compressor for every file is
// expensive, create one and reuse it.
fw, err = flate.NewWriter(out, flate.BestCompression)
} else {
fw.Reset(out)
}
return fw, err
})
// Proceed to add files to w.
}
作者:hhkbp
项目:goavr
func compressor(fw *Writer, toCompress <-chan *writerBlock, toWrite chan<- *writerBlock) {
switch fw.CompressionCodec {
case CompressionDeflate:
bb := new(bytes.Buffer)
comp, _ := flate.NewWriter(bb, flate.DefaultCompression)
for block := range toCompress {
_, block.err = comp.Write(block.encoded.Bytes())
block.err = comp.Close()
if block.err == nil {
block.compressed = bb.Bytes()
toWrite <- block
}
bb = new(bytes.Buffer)
comp.Reset(bb)
}
case CompressionNull:
for block := range toCompress {
block.compressed = block.encoded.Bytes()
toWrite <- block
}
case CompressionSnappy:
for block := range toCompress {
block.compressed = snappy.Encode(block.compressed, block.encoded.Bytes())
toWrite <- block
}
}
close(toWrite)
}
作者:TidyHuan
项目:siegfrie
// Save persists a Siegfried struct to disk (path)
func (s *Siegfried) Save(path string) error {
ls := persist.NewLoadSaver(nil)
ls.SaveTime(s.C)
s.em.Save(ls)
s.cm.Save(ls)
s.bm.Save(ls)
s.tm.Save(ls)
ls.SaveTinyUInt(len(s.ids))
for _, i := range s.ids {
i.Save(ls)
}
if ls.Err != nil {
return ls.Err
}
f, err := os.Create(path)
if err != nil {
return err
}
defer f.Close()
_, err = f.Write(append(config.Magic(), byte(config.Version()[0]), byte(config.Version()[1])))
if err != nil {
return err
}
z, err := flate.NewWriter(f, 1)
if err != nil {
return err
}
_, err = z.Write(ls.Bytes())
z.Close()
return err
}
作者:mozkeele
项目:certificatetransparenc
func (ent *RawEntry) writeTo(out io.Writer) error {
var buf bytes.Buffer
z, err := flate.NewWriter(&buf, 8)
if err != nil {
return err
}
if err := binary.Write(z, binary.LittleEndian, uint32(len(ent.LeafInput))); err != nil {
return err
}
if _, err := z.Write(ent.LeafInput); err != nil {
return err
}
if err := binary.Write(z, binary.LittleEndian, uint32(len(ent.ExtraData))); err != nil {
return err
}
if _, err := z.Write(ent.ExtraData); err != nil {
return err
}
if err := z.Close(); err != nil {
return err
}
bytes := buf.Bytes()
if err := binary.Write(out, binary.LittleEndian, uint32(len(bytes))); err != nil {
return err
}
if _, err := out.Write(bytes); err != nil {
return err
}
return nil
}
作者:skimat
项目:go-sam
func CompressString(in string) string {
buf := new(bytes.Buffer)
compressor, _ := flate.NewWriter(buf, 9)
compressor.Write([]byte(in))
compressor.Close()
return buf.String()
}
作者:xyprot
项目:we
// conditionally compress the HTTP response. this function must be executed
// after all response headers have been set by the underlying handler (because
// it needs to inspect them) but before they have been written to the client
// (because it needs to change the headers and the data writer).
func compressResponse(w *ResponseWriter, req *http.Request) {
// rudimentary "can this be compressed" check
if !compressable(w.Header().Get("Content-Type")) {
return
}
// do not re-encode
if w.Header().Get("Content-Encoding") != "" {
return
}
ae := req.Header.Get("Accept-Encoding")
// no q for u
switch {
case strings.Contains(ae, "gzip"):
w.WrapBodyWriter(func(w io.Writer) io.Writer {
return gzip.NewWriter(w)
})
w.Header().Set("Content-Encoding", "gzip")
w.Header().Del("content-length")
break
case strings.Contains(ae, "deflate"):
w.WrapBodyWriter(func(w io.Writer) io.Writer {
def, _ := flate.NewWriter(w, flate.DefaultCompression)
return def
})
w.Header().Set("Content-Encoding", "deflate")
w.Header().Del("content-length")
break
}
}
作者:software-project
项目:go-ex
func (data *Data) Compress() error {
if data.IsCompressed() || len(data.Content) < 32 {
// already compressed, or not worth compressing
// because data is nil or too short
return nil
}
buf := bytes.Buffer{}
w, err := flate.NewWriter(&buf, flate.BestCompression)
if err != nil {
return err
}
n, err := w.Write(data.Content)
if err != nil {
return err
}
if n != len(data.Content) {
return errs.ServerError("cannot compress")
}
err = w.Close()
if err != nil {
return err
}
compressedBytes := buf.Bytes()
if len(compressedBytes) < len(data.Content) {
data.UncompressedLength = len(data.Content)
data.Content = compressedBytes
data.ContentEncoding = ceDeflate
}
return nil
}
作者:netbrai
项目:goatpa
//NewLogger creates a new Logger instance
func NewLogger(directory string) (*Logger, error) {
var err error
if directory == "" {
if directory, err = ioutil.TempDir("", "dlog"); err != nil {
return nil, err
}
}
os.MkdirAll(directory, 0755)
filePath := filepath.Join(directory, "dlog.bin")
wFile, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
w, _ := flate.NewWriter(wFile, flate.BestCompression)
l := &Logger{
wChan: make(chan model.LogEntry, 1000),
wFile: wFile,
}
go l.writeRoutine(w)
return l, nil
}
作者:sunjiah
项目:goprox
func handlerError(rw http.ResponseWriter, html string, code int) {
var b bytes.Buffer
w, err := flate.NewWriter(&b, flate.BestCompression)
if err != nil {
rw.Header().Set("Content-Type", "text/plain")
rw.WriteHeader(http.StatusBadGateway)
io.WriteString(rw, err.Error())
}
fmt.Fprintf(w, "HTTP/1.1 %d\r\n", code)
fmt.Fprintf(w, "Content-Type: text/html; charset=utf-8\r\n")
fmt.Fprintf(w, "Content-Length: %d\r\n", len(html))
io.WriteString(w, "\r\n")
io.WriteString(w, html)
w.Close()
b0 := make([]byte, 2)
binary.BigEndian.PutUint16(b0, uint16(b.Len()))
rw.Header().Set("Content-Type", "image/gif")
rw.Header().Set("Content-Length", strconv.Itoa(len(b0)+b.Len()))
rw.WriteHeader(http.StatusOK)
rw.Write(b0)
rw.Write(b.Bytes())
}
作者:netbrai
项目:goatpa
func BenchmarkWriteWithBestDeflateCompression(b *testing.B) {
file := benchFile()
w, _ := flate.NewWriter(file, flate.BestSpeed)
benchmarkWrite(b, w)
fi, _ := file.Stat()
b.SetBytes(int64(int(fi.Size()) / 1024 / 1024))
}
作者:uileya
项目:helloworl
func Zip(unBytes []byte, contentEncoding string) (zipBytes []byte, err error) {
switch contentEncoding {
case "":
zipBytes = unBytes
break
case "gzip":
var bf bytes.Buffer
gw := gzip.NewWriter(&bf)
gw.Write(unBytes)
gw.Close()
zipBytes = bf.Bytes()
case "deflate":
var bf bytes.Buffer
var gw *flate.Writer
gw, err = flate.NewWriter(&bf, -1)
if err != nil {
return
}
gw.Write(unBytes)
gw.Close()
zipBytes = bf.Bytes()
default:
err = fmt.Errorf("Zip Unkown Content-Encoding: %v", contentEncoding)
}
return
}
作者:TShadwel
项目:fweigh
func Flate(r io.Writer) (c Compressor) {
var err error
if c, err = flate.NewWriter(r, -1); err != nil {
panic(err)
}
return
}
作者:blinka
项目:go-invoke
func deflate(inp []byte) ([]byte, error) {
out := new(bytes.Buffer)
writer, _ := flate.NewWriter(out, 1)
io.Copy(writer, bytes.NewBuffer(inp))
err := writer.Close()
return out.Bytes(), err
}
作者:IntegerCompan
项目:linaro-android-gc
// NewWriterLevel creates a new io.WriteCloser that satisfies writes by compressing data written to w.
// It is the caller's responsibility to call Close on the WriteCloser when done.
// level is the compression level, which can be DefaultCompression, NoCompression,
// or any integer value between BestSpeed and BestCompression (inclusive).
func NewWriterLevel(w io.Writer, level int) (io.WriteCloser, os.Error) {
z := new(writer)
// ZLIB has a two-byte header (as documented in RFC 1950).
// The first four bits is the CINFO (compression info), which is 7 for the default deflate window size.
// The next four bits is the CM (compression method), which is 8 for deflate.
z.scratch[0] = 0x78
// The next two bits is the FLEVEL (compression level). The four values are:
// 0=fastest, 1=fast, 2=default, 3=best.
// The next bit, FDICT, is unused, in this implementation.
// The final five FCHECK bits form a mod-31 checksum.
switch level {
case 0, 1:
z.scratch[1] = 0x01
case 2, 3, 4, 5:
z.scratch[1] = 0x5e
case 6, -1:
z.scratch[1] = 0x9c
case 7, 8, 9:
z.scratch[1] = 0xda
default:
return nil, os.NewError("level out of range")
}
_, err := w.Write(z.scratch[0:2])
if err != nil {
return nil, err
}
z.w = w
z.compressor = flate.NewWriter(w, level)
z.digest = adler32.New()
return z, nil
}
作者:andradeandre
项目:goadmi
func Encrypt(key string, privatekey PrivateKey, win io.Writer, length, sequence int64) (w io.Writer, e os.Error) {
c, e := simpleCipher(key)
if e != nil {
return
}
priv, e := readRSAKey(privatekey)
if e != nil {
return
}
iv := make([]byte, c.BlockSize())
_, e = rand.Read(iv)
if e != nil {
return
}
_, e = win.Write(iv) // pass the iv across first
if e != nil {
return
}
wraw := cipher.StreamWriter{cipher.NewCFBEncrypter(c, iv), win, nil}
wenc := flate.NewWriter(wraw, flate.BestCompression)
e = binary.Write(wenc, binary.LittleEndian, length)
if e != nil {
return
}
e = binary.Write(wenc, binary.LittleEndian, sequence)
if e != nil {
return
}
return &hashWriter{wenc, wraw, sha256.New(), priv, length}, nil
}
作者:lestrra
项目:go-sam
func allocFlateWriter() interface{} {
// flate.NewWriter (as of this writing) only returns an error
// if the second argument is invalid. As we are using a standard
// compression level here, there is no way this can err
w, _ := flate.NewWriter(emptyBuffer, flate.DefaultCompression)
return w
}
作者:skimat
项目:go-sam
func Compress(in []byte) []byte {
buf := new(bytes.Buffer)
compressor, _ := flate.NewWriter(buf, 9)
compressor.Write(in)
compressor.Close()
return buf.Bytes()
}
作者:richardlehan
项目:siegfrie
// Save persists a Siegfried struct to disk (path)
func (s *Siegfried) Save(path string) error {
ls := persist.NewLoadSaver(nil)
ls.SaveTime(s.C)
namematcher.Save(s.nm, ls)
mimematcher.Save(s.mm, ls)
containermatcher.Save(s.cm, ls)
xmlmatcher.Save(s.xm, ls)
riffmatcher.Save(s.rm, ls)
bytematcher.Save(s.bm, ls)
textmatcher.Save(s.tm, ls)
ls.SaveTinyUInt(len(s.ids))
for _, i := range s.ids {
i.Save(ls)
}
if ls.Err != nil {
return ls.Err
}
f, err := os.Create(path)
if err != nil {
return err
}
defer f.Close()
_, err = f.Write(append(config.Magic(), byte(config.Version()[0]), byte(config.Version()[1])))
if err != nil {
return err
}
z, err := flate.NewWriter(f, 1)
if err != nil {
return err
}
_, err = z.Write(ls.Bytes())
z.Close()
return err
}