我在文件上寫入了一些信息,尤其是unsigned int。 後來的另一個程序去閱讀這些信息。 問題是這個第二個程序非常慢。 我介紹它,花50%的時間來做atoi。如何在讀取文件時避免atoi
有沒有寫在文件中的無符號整型避免的atoi 辦法(?二進制序列化?)
PS:我使用mmap的讀取
編輯:
我看到你響應和看起來最好的解決方案是把int的二進制內容放在文件中
我在文件上寫入了一些信息,尤其是unsigned int。 後來的另一個程序去閱讀這些信息。 問題是這個第二個程序非常慢。 我介紹它,花50%的時間來做atoi。如何在讀取文件時避免atoi
有沒有寫在文件中的無符號整型避免的atoi 辦法(?二進制序列化?)
PS:我使用mmap的讀取
編輯:
我看到你響應和看起來最好的解決方案是把int的二進制內容放在文件中
atoi()仍然比使用字符串流更快。但是,使用字符串流來執行此操作是跨C++類型安全和標準的唯一方法。
既要類型安全又要標準化,並且比字符串流或像atoi()或strtoul()這樣的東西要快的最好方法是使用Boost庫的約定來實現它。
Boost lexical_cast速度快,類型安全。
編輯:下午2:07 2016年7月19日
在你的情況,如果你寫在二進制模式的文件,你可以完全跳過此。真的回到基本的東西,如...
ofstream fout;
fout.open("example.bin", ios::binary | ios::out | ios::trunc);
unsigned int int_out;
for(int i=0; i< someArray.length; ++i) {
int_out = someArray[i];
fout.write((char*)&int_out, sizeof(unsigned int));
}
然後,你可以閱讀它在另一端幾乎相同的方式。但使用...
ifstream fin;
fin.open("example.bin", ios::binary);
unsigned int int_in;
for(int i=0; i< someArray.length; ++i) {
fout.read((char*)&int_in, sizeof(unsigned int));
someArray[i] = int_in;
}
我會看看strtoul()。 與atoi()相比,它還具有錯誤處理的優點。
嘗試使用fstream讀取格式化輸入? – Arunmu
[BOOST serialization !!!!](http://www.boost.org/doc/libs/1_61_0/libs/serialization/doc/index.html) –
您是否通過將數據讀入固定緩衝區來最小化內存分配? –