2011-12-30 298 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