[英]Qt C++ Conversion from QJsonValue to QByteArray
我在QJsonValue
有一個大的(兆字節)字符串,我需要將其轉換為QByteArray
,因為我將字符串作為數據發送到QNetworkRequest
。
目前我這樣做:
myQJsonObject["myQJsonValue"].toString().toUtf8()
由於某種原因,這會導致多次將相同的數據復制到內存中嗎? 如果是這樣,你如何在沒有不必要的復制的情況下實現這一點?
為什么你不使用QJsonDocument
? 這應該用於閱讀和寫作。 有一個方法QJsonDocument :: toBinaryData 。 這個API應該以最有效的方式完成所有事情。
單個JSon值必須是其他JSon類型之一:object,string或某個數字。 我很確定你有JSon對象。 所以你的代碼應該是這樣的::
JSonValue val = someJsond["someKey"];
if (val.isObject()) {
QJSonDocument doc(val.toObject());
SendToServer(doc.toBinaryData());
} else {
// error or:
SendToServer(val.toString().toUtf8());
}
由於Qt的copy-on-write語義,對myQJsonObject["myQJsonValue"].toString()
的調用不涉及數據復制。
toUtf8
調用成本toUtf8
。 QString
將數據存儲為Unicode(16位QChar
),並以UTF-8編碼它不僅僅涉及數據復制。
QString::constData()
返回指向底層字符數組的指針。 但是,在Utf-8的情況下,每個字符由2個字節而不是1或2個字節表示。 這可能意味着通過網絡發送兩倍以上的數據。
因此,如果您的數據主要由ASCII字符組成,那么UTF-8可能是更好的選擇。 如果它包含許多非Ascii字符,而另一方可以處理UTF-16,那么UTF-16值得考慮。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.