无阻塞地读写java套接字

时间:2016-11-15 14:15:17

标签: java sockets network-programming

我有一个简单的Java IO TCP服务器/客户端原型,其中服务器大量写入客户端,客户端偶尔将写入到服务器。写入发生一个while循环,特别是在run()线程的Worker方法中,这是标准的:

@Override
public void run() {
    while (true) {
        // Server writes to client
        try {
            socket.getOutputStream.write(writeArray);
        } catch (Exception e) {
            System.exit(1);
        }
}

这是一个while循环,所以如果我还包括一个读操作,它会阻塞。

@Override
public void run() {
    while (true) {
        // Server writes to client
        try {
            socket.getOutputStream.write(writeArray);
        } catch (Exception e) {
            System.exit(1);
        }

        // Server reads from client
        try {
            int read = socket.getInputStream.read();
        } catch (Exception e) {
            System.exit(1);
        }
}

是否存在关于如何在不阻塞或大量浪费CPU周期的情况下偶尔进行读取的标准模式?

1 个答案:

答案 0 :(得分:2)

看看available()方法:https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#available--。然后你只需要阅读"如果可用"。