"private static Class clazz = SnappyDecompressor.class" 源文件中的 clazz 有什么用?
What is clazz used for in "private static Class clazz = SnappyDecompressor.class" source file?
我正在研究 Snappy、Zlib 和其他压缩器的实现(在 Java 中)。靠近源文件顶部的是下面这一行。谁能给我解释一下这是什么意思?
HACK - Use this as a global lock in the JNI layer
@SuppressWarnings({"unchecked", "unused"})
private static Class clazz = SnappyDecompressor.class;
据我了解,例如,在 Snappy 中,SnappyDecompressor.java 本质上是一个用于 snappy C/native 实现的包装器,为了调用该 C 实现,Java 层通过 JNI 进行调用界面。
snappy(Java 包装器)源代码的顶部,SnappyDecompressor.java 在这里:
package org.apache.hadoop.io.compress.snappy;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.io.compress.Decompressor;
/**
* A {@link Decompressor} based on the snappy compression algorithm.
* http://code.google.com/p/snappy/
*/
public class SnappyDecompressor implements Decompressor {
private static final Log LOG =
LogFactory.getLog(SnappyCompressor.class.getName());
private static final int DEFAULT_DIRECT_BUFFER_SIZE = 64 * 1024;
// HACK - Use this as a global lock in the JNI layer
@SuppressWarnings({"unchecked", "unused"})
private static Class clazz = SnappyDecompressor.class;
如评论中所述:它是从JNI层使用的,似乎是为了JNI层的一些锁定。 (see the full Decompressor source)
第 76、77 行:
SnappyDecompressor_clazz = (*env)->GetStaticFieldID(env, clazz, "clazz",
"Ljava/lang/Class;");
第 83 行:
jobject clazz = (*env)->GetStaticObjectField(env,thisj, SnappyDecompressor_clazz);
第 100 至 102 行:
LOCK_CLASS(env, clazz, "SnappyDecompressor");
const char* compressed_bytes = (const char*)(*env)->GetDirectBufferAddress(env, compressed_direct_buf);
UNLOCK_CLASS(env, clazz, "SnappyDecompressor");
我正在研究 Snappy、Zlib 和其他压缩器的实现(在 Java 中)。靠近源文件顶部的是下面这一行。谁能给我解释一下这是什么意思?
HACK - Use this as a global lock in the JNI layer
@SuppressWarnings({"unchecked", "unused"})
private static Class clazz = SnappyDecompressor.class;
据我了解,例如,在 Snappy 中,SnappyDecompressor.java 本质上是一个用于 snappy C/native 实现的包装器,为了调用该 C 实现,Java 层通过 JNI 进行调用界面。
snappy(Java 包装器)源代码的顶部,SnappyDecompressor.java 在这里:
package org.apache.hadoop.io.compress.snappy;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.io.compress.Decompressor;
/**
* A {@link Decompressor} based on the snappy compression algorithm.
* http://code.google.com/p/snappy/
*/
public class SnappyDecompressor implements Decompressor {
private static final Log LOG =
LogFactory.getLog(SnappyCompressor.class.getName());
private static final int DEFAULT_DIRECT_BUFFER_SIZE = 64 * 1024;
// HACK - Use this as a global lock in the JNI layer
@SuppressWarnings({"unchecked", "unused"})
private static Class clazz = SnappyDecompressor.class;
如评论中所述:它是从JNI层使用的,似乎是为了JNI层的一些锁定。 (see the full Decompressor source)
第 76、77 行:
SnappyDecompressor_clazz = (*env)->GetStaticFieldID(env, clazz, "clazz",
"Ljava/lang/Class;");
第 83 行:
jobject clazz = (*env)->GetStaticObjectField(env,thisj, SnappyDecompressor_clazz);
第 100 至 102 行:
LOCK_CLASS(env, clazz, "SnappyDecompressor");
const char* compressed_bytes = (const char*)(*env)->GetDirectBufferAddress(env, compressed_direct_buf);
UNLOCK_CLASS(env, clazz, "SnappyDecompressor");