尝试把 ssl/tls 网络数据解码到纯文本应用程序数据缓冲区子序列中。此“分散” 操作可在单个调用中把字节序列解码到一个或多个给定缓冲区序列中。分散解包通常在实现网络协议或文件格式时很有用,例如将数据分组放入段中(这些段由一个或多个长度固定的头,后跟长度可变的正文组成)。关于分散的更多信息,请参见 scatteringbytechannel
,有关子序列行为的更多信息,请参见 { scatteringbytechannel.read(bytebuffer[], int, int)
。
根据 sslengine 的状态,此方法可能使用网络数据而不生成任何应用程序数据(例如,它可能使用握手数据)。
应用程序负责从同位体可靠地获取网络数据,并且负责以数据接收时的顺序对数据调用 unwrap()。应用程序必须正确地同步对此方法的多次调用。
如果此 sslengine
还没有开始它的初始握手,则此方法将自动开始进行握手。
此方法将尝试使用一个完整的 ssl/tls 网络包,但使用的数据从不超过缓冲区中剩余字节的总和。会更新每个 bytebuffer
的位置,以反映使用或生成的数据量。界限保持不变。
由 src
和 dsts bytebuffer
使用的底层内存必须不能相同。
由于入站网络缓冲区可能由于调用而被修改:因此,如果由于某些次要目的而需要网络数据包,则在调用此方法前应该复制该数据。注:网络数据对第二个 sslengine 将不再有用,因为每个 sslengine 包含唯一的随机状态,该状态影响 ssl/tls 报文。
关于引擎关闭的更多信息,请参见该类的描述。
- 参数:
src
- 包含入站网络数据的 bytebuffer
。dsts
- 保存入站应用程序数据的 bytebuffer
数组。offset
- 第一个缓冲区(要传递该缓冲区中的字节)在缓冲区数组中的偏移量;必须为非负数并且不能大于 dsts.length
。length
- 要访问的最大缓冲区数;必须为非负数并且不能大于 dsts.length
- offset
。
- 返回:
- 描述此次操作结果的
sslengineresult
。
- 抛出:
sslexception
- 如果处理数据时遇到的问题导致 sslengine
中止。关于引擎关闭的更多信息,请参见该类的描述。
indexoutofboundsexception
- 如果关于 offset
和 length
参数的前提不成立。
readonlybufferexception
- 如果任何一个 dst
缓冲区是只读的。
illegalargumentexception
- 如果 src
或 dsts
为 null,或者指定的 dsts
子序列中的任何元素为 null。
illegalstateexception
- 如果没有设置客户端/服务器模式。- 另请参见:
scatteringbytechannel
,
scatteringbytechannel.read( bytebuffer[], int, int)