【发布时间】:2009-09-01 22:43:52
【问题描述】:
read(buffer, offset, length) 是如何实际工作的,如果我将长度读取为 32,这是否意味着它会一直阻塞直到收到 32 个字节?
我知道它会在套接字异常或连接关闭的情况下分别返回和异常或 0。
如果发送者只发送 31 个字节,read 会继续阻塞吗? 如果这是真的,这是否意味着 read 将始终返回等于传递给它的长度的整数?以及如果剩余的 1 个字节在一定时间后没有出现,我如何控制超时。
重要但未回答
相比之下,如果发送方发送 32 字节,这是否确保读取会阻塞,直到收到所有 32 字节,或者它可以在不读取所有 32 字节的情况下输出。
【问题讨论】:
-
我添加了示例代码,演示 Read 不会阻塞等待填充整个缓冲区。如果您不发送任何内容,是的,它会阻塞,但如果您发送至少一个字节,它将读取并返回。
-
你如何回答问题的第二部分,如果我发送 32 个字节并且我在 read 方法中指定了 32 个字节的长度,这是否确保它肯定会读取 32 个字节?我的意思是它会阻塞直到收到 32 个字节。
-
@Kazoom,我认为这个问题已经在两个不同的帖子及其包含的链接中得到了回答。它将阻塞,直到收到至少一个字节。