比如用gbk转码"hello world",写入的是"[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]"
但是可能网络延迟高,我收到的只有"104, 101, 108, 108, 111"
剩下的部分还在传输,这个时候我拿着收到这部分去转码就会问题
我想请教的就是,有没有办法知道这个接受完成了?
这两天写了个简单的工具,我的办法是先把bytes的length写过来
读的时候先读这个长度,然后没有读够这个长度的bytes就一直阻塞,
不知道有没有其他的解决方案?
或者是设置某个特别的值表示一次写的结束之类的? ------最佳解决方案-------------------- 问题一,你可能忽略了selector.select()的特性:
This method performs a blocking selection operation. It returns only after at least one channel is selected, this selector's wakeup method is invoked, or the current thread is interrupted, whichever comes first.
也就是它是阻塞式的,如果没有新的事件到达,就持续阻塞,而不是傻乎乎的狂循环浪费CPU。