[英]Read Java socket inputstream without thread.sleep() in the below code?
public static void waitUntil(String prompt, InputStream instr) {
while (true) {
try {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (instr.available() >= 5) {
byte[] buff = new byte[1024];
int ret_read = 0;
ret_read = instr.read(buff);
if (ret_read > 0) {
if ((new String(buff, 0, ret_read)).contains(prompt)
&& flag) {
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果删除该thread.sleep(1000)
或什至我将其减少到小于1000,则无法正常工作。
问题 :在没有所有传入字节到达之前,如何在没有thread.sleep()
情况下读取java socket inputstream?
if (instr.available() >= 5) {
不要那样做
无需检查有多少字节可用,只需尝试将一些字节读入缓冲区即可。
它将阻塞直到至少有一个字节可用,然后返回尽可能多的字节(也适合缓冲区)。
如果那没有返回您需要的所有字节,请循环直到获得它们。
如果您只想阅读所有内容,请查看以下线程: 将InputStream转换为Java中的字节数组 。 就个人而言,我为此使用Commons IO。
使用DataInputStream.readFully()
的缓冲区大小为5(在这种情况下,或更通常是您期望的数据大小),并摆脱sleep和available()
测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.