【问题标题】:Java non-blocking IO: Is it possible to check how much you can write before calling channel.write()?Java 非阻塞 IO:是否可以在调用 channel.write() 之前检查你可以写多少?
【发布时间】:2013-04-23 08:08:40
【问题描述】:

我了解 channel.write(outBuffer) 可能无法写入 outBuffer 的所有内容,因为底层套接字缓冲区已满。然后你必须注册 OP_WRITE 并等待选择器回调。但是我不想写部分消息,我想等到 channel.write 操作能够写出我的完整消息。这可能吗,还是我必须写才能知道我能写多少?


当然是在谈论http://docs.oracle.com/javase/6/docs/api/java/nio/channels/WritableByteChannel.html

【问题讨论】:

  • 你说的是什么频道?频道本身只有isOpenclose 方法:docs.oracle.com/javase/6/docs/api
  • @chrisapotek - 由于 Java 中使用 NIO 来指代 java.nio 中的“新 IO”包,因此根据我的回答中的 cmets,将标题更改为“非阻塞 IO”,这我现在正在删除。

标签: java sockets real-time nio nonblocking


【解决方案1】:

别担心。 TCP 中没有“消息”之类的东西。 TCP 可能会以任何它喜欢的方式破坏您的写入,并且接收器可能会在一次读取或 N 或介于两者之间的任何方式中接收它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多