为什么从 netty 4.0.15 到 4.0.19 我现在看到“您的平台没有提供完整的低级 API 来可靠地访问直接缓冲区。”在日志中?
我不是 Android 平台,我的 JRE 没有改变,我正在使用 OSGi。
关于如何检测这一点的顺序是否有所改变?
最佳答案
PlatformDependent0 似乎已经改变了它检测 sun.nio.ch.DirectBuffer 是否可用的方式。
boolean directBufferFreeable = false;
try {
Class<?> cls = Class.forName("sun.nio.ch.DirectBuffer", false, getClassLoader(PlatformDependent0.class));
Method method = cls.getMethod("cleaner");
if ("sun.misc.Cleaner".equals(method.getReturnType().getName())) {
directBufferFreeable = true;
}
} catch (Throwable t) {
// We don't have sun.nio.ch.DirectBuffer.cleaner().
}
logger.debug("sun.nio.ch.DirectBuffer.cleaner(): {}", directBufferFreeable? "available" : "unavailable");
由于这是一个 OSGi 应用程序,我需要将“sun.nio.ch”添加到 ClassLoader。我在这种情况下使用 felix 并将以下属性添加到配置中:
config.put(FRAMEWORK_SYSTEMPACKAGES_EXTRA, "sun.misc,sun.nio.ch");
关于java - Netty 日志现在显示 "low-level API for accessing direct buffers reliably",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458084/