我想读取一个大数据,然后使用Qt将其写入一个新文件.
我试过读一个大文件.大文件只有一行.我用readAll()和测试readLine().
如果数据文件大约是600MB,我的代码可以运行,虽然它很慢.
如果数据文件大约是6GB,我的代码将失败.
你能给我一些建议吗?
更新
我的测试代码如下:
#include <QApplication>
#include <QFile>
#include <QTextStream>
#include <QTime>
#include <QDebug>
#define qcout qDebug()
void testFile07()
{
QFile inFile("../03_testFile/file/bigdata03.txt");
if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
qcout << inFile.errorString();
return ;
}
QFile outFile("../bigdata-read-02.txt");
if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTime time1, time2;
time1 = QTime::currentTime();
while(!inFile.atEnd())
{
QByteArray arr = inFile.read(3*1024);
outFile.write(arr);
}
time2 = QTime::currentTime();
qcout << time1.msecsTo(time2);
}
void testFile08()
{
QFile inFile("../03_testFile/file/bigdata03.txt");
if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QFile outFile("../bigdata-readall-02.txt");
if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTime time1, time2, time3;
time1 = QTime::currentTime();
QByteArray arr = inFile.readAll();
qcout << arr.size();
time3 = QTime::currentTime();
outFile.write(inFile.readAll());
time2 = QTime::currentTime();
qcout << time1.msecsTo(time2);
}
int main(int argc, char *argv[])
{
testFile07();
testFile08();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
经过我的测试,我分享了我的经验.
read()并且readAll()看起来快一样; 实际上,read()更快一点.文件大小为600MB:
使用read功能,读写文件成本约为2.1s,读取时间为875ms
使用readAll功能,读写文件成本约10s,读取时间为907ms
文件的大小为6GB:
使用read功能,读取和写入有关文件的成本162S,与58S阅读
使用readAll功能,得到错误的答案0 故障运行良好.
将这两个文件作为QFiles打开.在一个循环中,读字节的固定数量的,说4K,到从输入文件中的一个阵列,然后写该阵列到输出文件中.继续,直到你用完字节.
但是,如果您只想逐字复制文件,则可以使用QFile :: copy
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |