【发布时间】:2016-12-15 22:40:38
【问题描述】:
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 个字节的响应。我想知道输出流是否没有正确发送命令。
【问题讨论】:
-
我在你的读取循环中看不到任何会导致它退出的逻辑。这是您的实际代码,还是您已对其进行了编辑?
-
这是我的实际代码。它在 read 为 -1 时退出。 read 在第一个 while 循环中为 13,当它第二次时,它会阻塞一段时间,然后以 -1 退出
标签: java multithreading sockets android-asynctask single-threaded