由於我無法找到如何在android調試輸出中輸出原始數據(例如沒有\n
自動插入),我決定繼承我們的日誌庫和緩衝區直到出現\n
。檢查std :: stringstream是否包含字符 - 緩存直到 n
我們的日誌庫接受的數據格式數量龐大,所以我決定創建一個模板方法:
template<typename T>
bool addToLog(std::stringstream* stream, android_LogPriority priority, T data) {
// Add new data to sstream
stream<<data;
//If the stream now contains new line
if(stream->PSEUDO_containsCharacter('\n')) {
// remove everything before '\n' from stream and add it to string
std::string str = stream->PSEUDO_getAllStringBefore('\n');
// Log the line
__android_log_print(priority, "", "%s", str.c_str());
// Remove \n from stream
stream->PSEUDO_removeFirstCharacter();
}
}
正如你所看到的,我不知道如何檢查\n
是否是流並刪除它之前的一切。這是我需要的 - 緩衝區數據,直到\n
,然後發送數據(沒有\n
)到android日誌庫。
'std :: getline'有什麼問題嗎? – LogicStuff
@LogicStuff我認爲只適用於標準輸入,我從來沒有看到它被用於像這樣的目的。 –
'std :: stringstream'和'std :: fstream'都是標準流 - [見層次結構](http://en.cppreference.com/w/cpp/io)。 – LogicStuff