问题描述
|
该函数是否总是返回buf.size()或-1?
如果不是,则表示我需要调用该函数以写入剩余未写入的数据?
例如,如果我有一个100个字节的QByteBuffer。
当我调用\“ tcpSocket.write(buf_100_bytes)\”时,是否有可能得到60或其他?
另外,该功能是否立即返回?
解决方法
与POSIX write()一样,QIODevice :: write()返回写入的字节数。可以是0到缓冲区大小之间的任何数字。另外,如果发生错误,它可能会返回负数,您应该单独检查该负数。
QIODevice :: write()不会为套接字阻塞(它们被设置为非阻塞模式),只是将字节添加到缓冲区中,然后再写入。
要在写入字节时获得通知,可以连接到bytesWritten(qint64)信号。要阻塞直到实际写入字节,可以使用waitForBytesWritten()(通常在main / UI线程中不是一个好主意)。
,我引用Qt文档:
将数据的最大maxSize字节从数据写入设备。返回实际写入的字节数;如果发生错误,则返回-1。
这意味着,它将返回写入的字节数,或者在出现错误的情况下返回-1。您可以通过调用error()方法或连接到error()信号来获取错误。