我的Android应用出现了新问题. SocketChannel告诉我它是isReadable(),但是没有什么可读取的.
while(running)
{
int readyChannels = 0;
try {
readyChannels = selector.select();
} catch (IOException e) {
e.printStackTrace();
}
if(readyChannels == 0) continue;
Set selectedKeys = selector.selectedKeys();
Iterator keyIterator = selectedKeys.iterator();
while(keyIterator.hasNext())
{
SelectionKey key1 = keyIterator.next();
if(key1.isReadable())
{
publishProgress(1);
}
else if(key1.isWritable())
{
publishProgress(2);
}
else if(!key1.isValid())
{
Log.e("State", "progress error");
publishProgress(3);
}
}
}
我在onProgressUpdate中调用所需的函数.这是一个WebSocket应用程序,因此我需要发送和接收握手.发送和接收握手与此while循环一起使用.首先发送SelectionKey.isWriteable()和握手,然后读取SelectionKey.isReadable()和握手.但是然后SelectionKey.isReadable()仍然为true.现在,将调用普通的读取功能(而不是readHandshake).但是没有什么可阅读的.这是我的读取功能的代码:
public byte[] read(int nBytes)
{
Log.e("State", "public byte[] read(int nBytes) start");
byte[] resultData = new byte[1024];
ByteBuffer data = ByteBuffer.wrap(resultData);
int remainingBytes = nBytes;
while(remainingBytes >= 0)
{
ByteBuffer buffer = ByteBuffer.allocate(1024);
int bytesRead = 0;
try {
bytesRead = channel.read(buffer);
} catch (IOException e) {
Log.e("ERROR", "channel read");
}
if(bytesRead < 0)
{
sockState = WebSocketState.WebSocketErrorOccurred;
}
else
{
remainingBytes = remainingBytes - bytesRead;
data.put(buffer.array(), 0, bytesRead);
}
}
Log.e("State", "public byte[] read(int nBytes) done");
return resultData;
}
现在,它陷入了无尽的while循环中.剩余字节永远不会< 0,因为没有要读取的内容,bytesRead保持为0.
我的问题是,什么也没读,为什么isReadable为true?