All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dromara.hutool.http.GlobalCompressStreamRegister Maven / Gradle / Ivy

There is a newer version: 6.0.0.M3
Show newest version
/*
 * Copyright (c) 2013-2024 Hutool Team and hutool.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.dromara.hutool.http;

import org.dromara.hutool.core.compress.InflaterInputStream;
import org.dromara.hutool.core.map.CaseInsensitiveMap;
import org.dromara.hutool.core.reflect.ConstructorUtil;

import java.io.InputStream;
import java.util.Map;
import java.util.zip.GZIPInputStream;

/**
 * 全局响应内容压缩解压器注册中心
* 通过注册指定Accept-Encoding的流,来包装响应内容流,从而支持特殊压缩算法 * * @author looly * @since 6.0.0 */ public enum GlobalCompressStreamRegister { /** * 单例对象 */ INSTANCE; /** * 存储内容压缩流信息 */ private final Map> compressMap = new CaseInsensitiveMap<>(); /** * 构造,初始化默认的压缩算法 */ GlobalCompressStreamRegister() { compressMap.put("gzip", GZIPInputStream.class); compressMap.put("deflate", InflaterInputStream.class); } /** * 包装原始响应流为指定压缩算法解压流 * * @param in 原始响应流 * @param contentEncoding 压缩编码,如gzip等 * @return 包装后的响应流 */ public InputStream wrapStream(final InputStream in, final String contentEncoding){ final Class streamClass = get(contentEncoding); if (null != streamClass) { try { return ConstructorUtil.newInstance(streamClass, in); } catch (final Exception ignore) { // 对于构造错误的压缩算法,跳过之 } } return in; } /** * 获取解压器 * * @param contentEncoding Accept-Encoding名称,如gzip、defalte、br等,不区分大小写 * @return 解压器 */ public Class get(final String contentEncoding) { return compressMap.get(contentEncoding); } /** * 注册解压器 * * @param contentEncoding Accept-Encoding名称,如gzip、defalte、br等,不区分大小写 * @param streamClass 解压类 */ synchronized public void register(final String contentEncoding, final Class streamClass) { this.compressMap.put(contentEncoding, streamClass); } /** * 注销压缩器 * * @param contentEncoding Accept-Encoding名称,如gzip、defalte、br等,不区分大小写 */ synchronized public void unRegister(final String contentEncoding) { this.compressMap.remove(contentEncoding); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy