c# - Java 相当于 C# Stream.BeginRead() 和 AsyncResult?

标签 c# java sockets

我有这样的代码可以移植到 Java:

public class MyClass
{
    Stream _stream;
    AsyncCallback callback;
    IAsyncResult readOperation;

    public MyClass(string host, string port)
    {
        TcpClient tcpClient = new TcpClient();
        tcpClient.Connect(host, port);
        _stream = tcpClient.GetStream();
        callback = new AsyncCallback(Read);
        readOp = _stream.BeginRead(headerBuffer, 0, 1, callback, null);
    }

    private void listen(IAsyncResult asyncResult)
    {
        _stream.EndRead(asyncResult);
        //Do some work
        readOperation = _stream.BeginRead(headerBuffer, 0, 1, callback, null);
    }
}

我尝试过,但没有真正成功

es = Executors.newFixedThreadPool(2);
es.execute(new ListenTask());

public class ListenTask implements Runnable {

    public void run() {
        //Stream is a SocketChannel
    _stream.socket().getInputStream().read(headerBuffer, 0, 1);
    }
}

我应该使用 SocketChannel.read() 吗?

额外问题:java 中的等价物是什么 readOperation.AsyncWaitHandle.WaitOne();

非常感谢

最佳答案

Java 有 NIO,它支持非阻塞但不支持异步/事件驱动 IO。然而,在 NIO 之上构建了各种库来提供此类 API/行为。

最好的一个是 netty我可以根据个人使用情况推荐。

编辑:我相信真正的异步 IO 将在 Java 7 中出现。

关于c# - Java 相当于 C# Stream.BeginRead() 和 AsyncResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542984/

相关文章:

c# - 将 DLL 嵌入已编译的可执行文件中

c# - 相当于使用 C# SerialPort 类设置 termios c_iflag=IGNPAR

java - 使用 Java 写入 MySQL 数据库的性能低下

java - UDP 接收和发送的 UDP 数据包有问题吗?

sockets - SMTP 邮件服务器 (sendgrid) 提交时出错

c# - 检查 List<T> 是否包含指定的整数

c# - Designer 在 InitializeComponent 中创建一些字段而不是创建全局变量

java - 在 Google Dataflow 中作为 DataflowPipelineRunner 运行时访问资源文件

java - 如何在浏览器关闭时触发小程序中的 windowClosing() 事件

python - 错误 : Transport endpoint is not connected (Python Sockets)