当前位置: 技术问答>java相关
socket.getInputStream().read(byteArray,position,lengh)是如何工作的???
来源: 互联网 发布时间:2015-08-23
本文导语: 应该是堵塞的方法 就是说如果没读到指定长度的数据会继续等待读取 可为什么有时候小于指定读取程度它就完成了呢 比如我指定2000,它读到1500就结束,没有报错 我继续读也可以把后500读出来 请专家指点内部机制...
应该是堵塞的方法
就是说如果没读到指定长度的数据会继续等待读取
可为什么有时候小于指定读取程度它就完成了呢
比如我指定2000,它读到1500就结束,没有报错
我继续读也可以把后500读出来
请专家指点内部机制问题 一般摸棱两可的答案就免了
就是说如果没读到指定长度的数据会继续等待读取
可为什么有时候小于指定读取程度它就完成了呢
比如我指定2000,它读到1500就结束,没有报错
我继续读也可以把后500读出来
请专家指点内部机制问题 一般摸棱两可的答案就免了
|
这是一个类似于读者/写者的机制,Java Socket中有输入缓冲和输出缓冲,当输入缓冲为空时,调用read会阻塞当前线程,如果不为空,就把缓冲中的数据读出来,然后清空缓冲区。
|
socket接收端收到数据后(2000个字节长),并不是等待你去网络上读取,只要你连接读取一次,一次性发送的数据已经在接收端的缓存中存有数据。如果第一次读取1500个字节,这时候另外的500个字节已经存在于缓存中,所有你第二次读取500个字节的时候能够读到。你可以读505个字节后果会是怎么样?