我正试图围绕hasSpaceAvailable
NSOutputStream 背后的逻辑。
在我的应用程序中,我通过由 NSInput/output 流管理的 CFSocket 发送大量数据(100MB),分成 4080 字节的块(硬限制)。
当我开始写入数据时,大约四分之一hasSpaceAvailable
突然变成NO
,所以我将数据添加到队列中。但是,如果我忽略这一点并尝试写入数据,则写入似乎可以作为write:maxLength:
与 maxLength 参数(4080)匹配的返回值。
输出流有什么空间?据我所知,在使用 UNIX/Berkley 套接字时,没有可用于确定套接字是否可以写入的逻辑,您只需编写并确定是否所有数据都已写入。
该物业的文件指出:
一个布尔值,指示是否可以写入接收器。(只读)
YES
如果可以写入接收器,或者是否必须尝试写入以确定是否有可用空间,NO
否则。
在我看到 NO 的示例中,当我仍然可以写入该套接字时,是什么因素导致了这个结果。