从SSLEngine文档中可以看到:“通过将SSL/TLS抽象与I/O传输机制分离,SSLEngine可用于各种I/O类型,例如非阻塞I/O (轮询)、可选非阻塞I/O、套接字和传统输入/输出流、本地ByteBuffers或字节数组等。”与使用SSLSocket阻止IO相比,将SSLEngine与常规套接字和阻塞通道一起使用会更好。
发布于 2017-07-22 19:35:15
在一定程度上,是的。NIO不仅仅是关于非阻塞IO的。它还带来了:
一种更高级的应用程序接口,基于包装缓冲区( arrays.
最后一点具有非常具体的一般性能含义,因为当使用基于堆的数组/缓冲区时,JVM会对在本机调用中发送的任何数组进行额外的复制,以促进与垃圾收集器的同步。使用本机缓冲区可以避免这种情况,这可以显著减少垃圾收集开销。
也就是说,SSLEngine有巨大的可用性问题,因为正确使用它非常困难,特别是比使用好的旧SSLSocket要难得多。
幸运的是,this library允许使用带有ByteChannel接口的SSLEngine,围绕SSLEngine做所有繁重的工作(免责声明:我是主要作者)。
https://stackoverflow.com/questions/39866496
复制相似问题