小编bef*_*ire的帖子

写入通道后,Java Selector返回带有OP_READ的SelectionKey,而无需在无限循环中的数据

我的代码出了问题:我用Selector编写了简单的SocketChannel客户端,启动后成功从服务器读取消息(服务器发送事件).但是在写入socket(参见main方法)之后,选择器开始在infinyty循环中返回可读套接字,handleKey返回-1个字节的readed,因此选择器所有时间都返回OP_READ SelectionKey而没有数据用于读取.对不起我的英语不好.

谢谢.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;

public class SelectorTest
{

    public SelectorTest() throws IOException {
        selector = Selector.open();
    }

    private void runSelector() {

        new Thread(new Runnable() {

            public void run()
            {

                alive = true;
                try {
                    while(alive) {
                        System.out.println("Selector started...");

                        selector.select();

                        Iterator<SelectionKey> keyIter = selector.selectedKeys().iterator();

                        while(keyIter.hasNext()) {

                            SelectionKey key = keyIter.next();

                            keyIter.remove();

                            handleKey(key);
                        }
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }).start();
    } …
Run Code Online (Sandbox Code Playgroud)

java nio selector socketchannel

4
推荐指数
1
解决办法
4968
查看次数

Bash,混淆不同文件测试的结果(test -f)

我在这个表达式中对bash感到困惑:

$ var="" # empty var
$ test -f $var; echo $? # test if such file exists
0 # and this file exists, amazing!
$ test -f ""; echo $? # let's try doing it without var
1 # and all ok
Run Code Online (Sandbox Code Playgroud)

我无法理解这种bash行为,也许有人可以解释一下吗?

testing shell posix file

4
推荐指数
1
解决办法
144
查看次数

标签 统计

file ×1

java ×1

nio ×1

posix ×1

selector ×1

shell ×1

socketchannel ×1

testing ×1