不知道起什么标题系列1

package org.apache.kafka.common.record;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.nio.ByteBuffer;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.kafka.common.KafkaException;
import org.apache.kafka.common.utils.ByteBufferInputStream;
import org.apache.kafka.common.utils.ByteBufferOutputStream;

public enum CompressionType {
    NONE(0, "none", 1.0F) {
        public OutputStream wrapForOutput(ByteBufferOutputStream buffer, byte messageVersion) {
            return buffer;
        }

        public InputStream wrapForInput(ByteBuffer buffer, byte messageVersion, BufferSupplier decompressionBufferSupplier) {
            return new ByteBufferInputStream(buffer);
        }
    },
    GZIP(1, "gzip", 1.0F) {
        public OutputStream wrapForOutput(ByteBufferOutputStream buffer, byte messageVersion) {
            try {
                return new BufferedOutputStream(new GZIPOutputStream(buffer, 8192), 16384);
            } catch (Exception var4) {
                throw new KafkaException(var4);
            }
        }

        public InputStream wrapForInput(ByteBuffer buffer, byte messageVersion, BufferSupplier decompressionBufferSupplier) {
            try {
                return new BufferedInputStream(new GZIPInputStream(new ByteBufferInputStream(buffer), 8192), 16384);
            } catch (Exception var5) {
                throw new KafkaException(var5);
            }
        }
    },
    SNAPPY(2, "snappy", 1.0F) {
        public OutputStream wrapForOutput(ByteBufferOutputStream buffer, byte messageVersion) {
            try {
                return CompressionType.SnappyConstructors.OUTPUT.invoke(buffer);
            } catch (Throwable var4) {
                throw new KafkaException(var4);
            }
        }

        public InputStream wrapForInput(ByteBuffer buffer, byte messageVersion, BufferSupplier decompressionBufferSupplier) {
            try {
                return CompressionType.SnappyConstructors.INPUT.invoke(new ByteBufferInputStream(buffer));
            } catch (Throwable var5) {
                throw new KafkaException(var5);
            }
        }
    },
    LZ4(3, "lz4", 1.0F) {
        public OutputStream wrapForOutput(ByteBufferOutputStream buffer, byte messageVersion) {
            try {
                return new KafkaLZ4BlockOutputStream(buffer, messageVersion == 0);
            } catch (Throwable var4) {
                throw new KafkaException(var4);
            }
        }

        public InputStream wrapForInput(ByteBuffer inputBuffer, byte messageVersion, BufferSupplier decompressionBufferSupplier) {
            try {
                return new KafkaLZ4BlockInputStream(inputBuffer, decompressionBufferSupplier, messageVersion == 0);
            } catch (Throwable var5) {
                throw new KafkaException(var5);
            }
        }
    };

    public final int id;
    public final String name;
    public final float rate;

    private CompressionType(int id, String name, float rate) {
        this.id = id;
        this.name = name;
        this.rate = rate;
    }

    public abstract OutputStream wrapForOutput(ByteBufferOutputStream var1, byte var2);

    public abstract InputStream wrapForInput(ByteBuffer var1, byte var2, BufferSupplier var3);

    public static CompressionType forId(int id) {
        switch(id) {
        case 0:
            return NONE;
        case 1:
            return GZIP;
        case 2:
            return SNAPPY;
        case 3:
            return LZ4;
        default:
            throw new IllegalArgumentException("Unknown compression type id: " + id);
        }
    }

    public static CompressionType forName(String name) {
        if (NONE.name.equals(name)) {
            return NONE;
        } else if (GZIP.name.equals(name)) {
            return GZIP;
        } else if (SNAPPY.name.equals(name)) {
            return SNAPPY;
        } else if (LZ4.name.equals(name)) {
            return LZ4;
        } else {
            throw new IllegalArgumentException("Unknown compression name: " + name);
        }
    }

    private static MethodHandle findConstructor(String className, MethodType methodType) {
        try {
            return MethodHandles.publicLookup().findConstructor(Class.forName(className), methodType);
        } catch (ReflectiveOperationException var3) {
            throw new RuntimeException(var3);
        }
    }

    private static class SnappyConstructors {
        static final MethodHandle INPUT;
        static final MethodHandle OUTPUT;

        private SnappyConstructors() {
        }

        static {
            INPUT = CompressionType.findConstructor("org.xerial.snappy.SnappyInputStream", MethodType.methodType(Void.TYPE, InputStream.class));
            OUTPUT = CompressionType.findConstructor("org.xerial.snappy.SnappyOutputStream", MethodType.methodType(Void.TYPE, OutputStream.class));
        }
    }
}

首先是枚举,居然可以这样写,就是写个抽象的方法,然后在每个美剧后面用{}扩住,在本例子中就是用来区分不同的方式创建不同类型的实例。

然后是一些很陌生的类,比如
MethodHandle
InputStream
OutputStream
ByteBufferOutputStream
后面可以每个查下是啥意思;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值