为什么从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");