2011-12-30 302 views
1

我正在尝试使用QIODevice::readLine()。我已经看过了两个版本 - 一个返回QByteArray使用QIODevice :: readLine()的正确方法

QByteArray buffer = iodevice->readLine() 

和一个读数为char *缓冲区:

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

我需要阅读的线,检测错误和操纵它的QString。

我应该使用这两个重载版本,使之简单,高效?

我所知道的,到目前为止:

  • 的QByteArray中的版本有不能够检测读取错误的问题。内存可能被分配在=操作
  • 焦炭来回*版本让我读检测错误,但它迫使我限制了数据的大小,我读,它是很难一起工作。

回答

2

有没有更好的办法,这取决于我猜的应用。如果此操作的性能对于您的应用程序至关重要,那么您可以简单介绍这两者。

考虑到使用的QByteArray你不分配内存“来回”。 QByteArray实现隐式共享,所以使用operator =可以快速高效地进行。与char *完全一样,但也许更简单。

的QString既有用的QByteArray的构造函数和字符*,所以这是完全一样的。

编辑:为了澄清有关复制点时的QByteArray通过返回值认为是的,两个对象可能会创建,但只有浅拷贝制成。这是有效的。您可能需要阅读this,这非常重要。另外,考虑有一个closer look :-)

+0

感谢您的答案,它让我意识到,性能不是那么重要:-) 只是一个小问题:无论如何返回QByteArray导致分配,因为内函数readLine (在返回之前)必须创建两个QByteArrays(一个将被返回,另一个在函数作用域之外,它将在readLine返回后保存该值,对吧? – cube 2012-01-01 10:29:01

+0

我在答案中添加了一些细节。希望能回答你的问题。 – 2012-01-01 13:45:52