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);
}
Я вызываю sendCommand три раза в моем doInBackground(). Я ожидаю, что 13 байтов ответа будут отправлены после отправки первой команды, а затем один байт в моей второй, а затем около 1 кБ в моей третьей.asynctask read blocking
Вопрос 1: Первый вызов sendCommand() считывает 13 байт в ответ, но считывает блоки в состоянии while, потому что данных больше нет. Как я могу запустить его без блокировки?
Вопрос 2: Возможно ли повторить запись и чтение в одном потоке? Потому что для второго вызова sendCommand() я получаю тот же 13-байтовый, а не 1 байт ответа. Интересно, не возвращает ли выходной поток команду.
Я не вижу никакой логики в вашем цикле чтения, которая заставит его выйти. Это ваш фактический код, или вы его отредактировали? – teppic
Это мой фактический код. Он выдается, когда чтение равно -1. read - 13 в первом цикле while и когда он второй раз вокруг него блокирует некоторое время, то выходит с -1 – juysw