Преглед на файлове

add http encoding utility

tags/2.0.1
Jonathan Cobb преди 5 години
родител
ревизия
c006089b05
променени са 2 файла, в които са добавени 71 реда и са изтрити 0 реда
  1. +13
    -0
      pom.xml
  2. +58
    -0
      src/main/java/org/cobbzilla/util/http/HttpContentEncodingType.java

+ 13
- 0
pom.xml Целия файл

@@ -18,6 +18,14 @@ cobbzilla-utils is available under the Apache License, version 2: http://www.apa
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>

<repositories>
<repository>
<id>bintray-nitram509-jbrotli</id>
<name>bintray</name>
<url>http://dl.bintray.com/nitram509/jbrotli</url>
</repository>
</repositories>

<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
@@ -163,6 +171,11 @@ cobbzilla-utils is available under the Apache License, version 2: http://www.apa
<artifactId>commons-compress</artifactId>
<version>${commons-compress.version}</version>
</dependency>
<dependency>
<groupId>org.meteogroup.jbrotli</groupId>
<artifactId>jbrotli</artifactId>
<version>0.5.0</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>


+ 58
- 0
src/main/java/org/cobbzilla/util/http/HttpContentEncodingType.java Целия файл

@@ -0,0 +1,58 @@
package org.cobbzilla.util.http;

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.AllArgsConstructor;
import org.cobbzilla.util.io.FilterInputStreamViaOutputStream;
import org.meteogroup.jbrotli.io.BrotliInputStream;
import org.meteogroup.jbrotli.io.BrotliOutputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.*;

@AllArgsConstructor
public enum HttpContentEncodingType {

gzip (GZIPInputStream::new, GZIPOutputStream::new, GZIPOutputStream.class),

deflate (in -> new InflaterInputStream(in, new Inflater(true)),
out -> new DeflaterOutputStream(out, new Deflater(7, true)),
in -> new FilterInputStreamViaOutputStream(in, out -> new InflaterOutputStream(out, new Inflater(true)))),

br (BrotliInputStream::new, BrotliOutputStream::new, BrotliOutputStream.class),
bro (BrotliInputStream::new, BrotliOutputStream::new, BrotliOutputStream.class);

private final HttpContentEncodingInputWrapper inputWrapper;
private final HttpContentEncodingOutputWrapper outputWrapper;
private final HttpContentEncodingInputAsOutputWrapper inputAsOutputWrapper;

HttpContentEncodingType (HttpContentEncodingInputWrapper inWrap,
HttpContentEncodingOutputWrapper outWrap,
Class<? extends OutputStream> inAsOutClass) {
this.inputWrapper = inWrap;
this.outputWrapper = outWrap;
this.inputAsOutputWrapper = in -> new FilterInputStreamViaOutputStream(in, inAsOutClass);
}

@JsonCreator public static HttpContentEncodingType fromString (String v) { return valueOf(v.toLowerCase()); }

public InputStream wrapInput(InputStream in) throws IOException { return inputWrapper.wrap(in); }

public OutputStream wrapOutput(OutputStream out) throws IOException { return outputWrapper.wrap(out); }

public FilterInputStreamViaOutputStream wrapInputAsOutput(InputStream in) throws IOException { return inputAsOutputWrapper.wrap(in); }

public interface HttpContentEncodingInputWrapper {
InputStream wrap(InputStream in) throws IOException;
}

public interface HttpContentEncodingOutputWrapper {
OutputStream wrap(OutputStream out) throws IOException;
}

public interface HttpContentEncodingInputAsOutputWrapper {
FilterInputStreamViaOutputStream wrap(InputStream in) throws IOException;
}

}

Зареждане…
Отказ
Запис