qint64 write(const char *data, qint64 len); qint64 write(const char *data);
时间: 2024-03-21 15:40:24 浏览: 25
`QIODevice` 中的 `write` 函数有两个重载版本:
```cpp
qint64 write(const char *data, qint64 len);
qint64 write(const char *data);
```
第一个版本的函数是将 `data` 指向的字节数组中前 `len` 个字节写入到设备中。这个函数返回实际写入的字节数,如果返回值小于 `len`,则表示写入失败。
第二个版本的函数是将 `data` 指向的以 null 结尾的字节数组写入到设备中。这个函数返回实际写入的字节数,如果返回值小于字符串的长度,表示写入失败。
其中,`qint64` 是 Qt 中定义的一个整数类型,通常被定义为 `long long`。这个类型的长度是 64 位,可以用于存储比普通的整型更大的数值。
相关问题
protected: #ifdef QT_NO_QOBJECT QIODevice(QIODevicePrivate &dd); #else QIODevice(QIODevicePrivate &dd, QObject *parent = 0); #endif virtual qint64 readData(char *data, qint64 maxlen) = 0; virtual qint64 readLineData(char *data, qint64 maxlen); virtual qint64 writeData(const char *data, qint64 len) = 0; void setOpenMode(OpenMode openMode); void setErrorString(const QString &errorString); 为啥无法访问protected的qiodevice
在C++中,protected访问修饰符表示只有该类的成员函数和友元函数可以访问受保护的成员。在您提供的代码中,`QIODevice`类中的`readData`、`readLineData`和`writeData`函数以及`setOpenMode`和`setErrorString`函数都被声明为受保护的。
外部代码无法直接访问受保护的成员函数和变量。如果您想访问这些函数,您需要在继承自`QIODevice`的派生类中使用它们,或者通过友元关系让其他类能够访问这些受保护的成员。
如果您正在尝试从外部代码中访问这些受保护的成员,可能需要检查您的代码逻辑是否正确,或者考虑使用派生类继承`QIODevice`并通过派生类来访问这些受保护的成员。
优化代码 qint64 time_period = QDateTime::currentDateTime().toMSecsSinceEpoch(); //原始数据+8字节时间存储 QByteArray savedata; savedata.append((const char*)&time_period,8); savedata.append((const char*)frame.data(),len); if(filename_raw != ""){ filename_raw = filename_raw.replace("./data/","./data/unframe/"); SaveAsBytes(filename_raw,(const char*)savedata.data(),savedata.size()); }
可以考虑使用流式操作来优化代码,避免频繁的内存分配和拷贝。具体的实现方法如下:
```c++
qint64 time_period = QDateTime::currentDateTime().toMSecsSinceEpoch();
QByteArray savedata;
QDataStream stream(&savedata, QIODevice::WriteOnly);
stream << time_period << QByteArray((const char*)frame.data(), len);
if (!filename_raw.isEmpty()) {
QString filename = filename_raw;
filename.replace("./data/", "./data/unframe/");
QFile file(filename);
if (file.open(QIODevice::WriteOnly)) {
file.write(savedata);
file.close();
}
}
```
使用流式操作可以将数据直接写入到目标 `QByteArray` 中,避免了多次的内存分配和拷贝。同时,使用 `QFile` 来保存数据也可以避免在内存中保存大量的数据。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)