使用QIODevice :: readLine()的正确方法

时间:2011-12-30 22:52:35

标签: qt

我正在尝试使用QIODevice::readLine()。我查看了两个版本 - 一个返回QByteArray

QByteArray buffer = iodevice->readLine()

和一个读取char *缓冲区:

char buffer[SIZE];
qint64 used;
used = iodevice->readline(buffer, SIZE);

我需要读取一行,检测错误并将其作为QString进行操作。

我应该使用这两个重载版本中的哪一个来使其简单有效?

到目前为止我所知道的:

  • QByteArray版本存在无法检测读取错误的问题。可以在=运算符
  • 中来回分配内存
  • char * version让我检测读取错误,但它迫使我限制我读取的数据大小,并且更难以使用。

1 个答案:

答案 0 :(得分:2)

没有更好的方法,这取决于我猜的应用程序。如果此操作的性能对您的应用程序至关重要,则可以简单地对两者进行分析。

考虑到使用QByteArray,你不是“来回”分配内存。 QByteArray实现了隐式共享,因此使用operator =快速有效。与char *完全相同,但也许更简单。

QString既包含QByteArray的ctor,也包含char *,因此完全相同。

编辑:为了澄清关于按值返回QByteArray时副本的要点,请考虑是,可能会创建两个对象,但只会创建浅副本。因此这是有效的。您可能希望阅读this,这非常重要。另外,请考虑使用closer look: - )