private byte[] sendCommand (byte[] command){
try {
nos.write(command);
nos.flush();
byte[] buffer = new byte[4096];
int read;
while ((read = nis.read(buffer, 0, 4096)) > 0 && isConnecting) {
// Read the response
temp_data = new byte[read];
System.arraycopy(buffer, 0, temp_data, 0, read);
}
我在doInBackground()中调用sendCommand三次。 我希望在发送第一个命令之后有13个字节的响应,然后在我的第二个命令中有一个字节,然后在我的第三个命令中大约1kB。
问题1:对sendCommand()的第一次调用在响应中读取13个字节,但读取在while条件下阻塞,因为没有更多数据。如何让它在没有阻塞的情况下运行?
问题2:是否可以在一个线程中发送重复写入和读取? 因为对sendCommand()的第二次调用,我得到相同的13字节而不是1字节的响应。我想知道输出流是否没有正确发送命令。
答案 0 :(得分:0)
您的读取被阻止,因为您已要求它检索4k字节。虽然可能在读取所有请求的字节之前返回,但它会阻止这样做。您应该只尝试读取您期望的字节数:
byte[] response = new byte[expectedLen];
new DataInputStream(nis).readFully(response);
return response;
答案 1 :(得分:0)
我不得不摆脱while循环,所以我只读了一次。我仍然不明白为什么它不会立即结束while循环,但删除循环的工作时间也是如此。