I字符串格式爲name:key:dataLength:data
,這些字符串通常可以鏈接在一起。例如"aNum:n:4:9879aBool:b:1:taString:s:2:Hi"
這將映射到一個對象是這樣的:飛鏢高效的字符串處理技術?
{
aNum: 9879,
aBool: true,
aString: "Hi"
}
我解析這個格式的字符串的方法,但我不知道它是否是使用substring
被pprocessing字符串的最有效的方法,有沒有處理字符串以這種方式更有效的方式(重複斬去前部):
Map<string, dynamic> fromString(String s){
Map<String, dynamic> _internal = new Map();
int start = 0;
while(start < s.length){
int end;
List<String> parts = new List<String>(); //0 is name, 1 is key, 2 is data length, 3 is data
for(var i = 0; i < 4; i++){
end = i < 3 ? s.indexOf(':') : num.parse(parts[2]);
parts[i] = s.substring(start, end);
start = i < 3 ? end + 1 : end;
}
var tranType = _tranTypesByKey[parts[1]]; //this is just a map to an object which has a function that can convert the data section of the string into an object
_internal[parts[0]] = tranType._fromStr(parts[3]);
}
return _internal;
}
您能否提供有關此類字符串的預期大小或您想要一次處理多少個這樣的字符串的信息。它取決於很多這樣的信息,哪些策略是有意義的,或者如果投入時間進行優化是有意義的。 –
字符串的數據部分在大小和內容方面可以是絕對的任何東西,並且這些對象的鏈接也可能是巨大的,我不希望它們成爲我個人使用它們的唯一原因將只使用小型簡單對象,但是類應該支持具有任意數量屬性的對象。 – 0xor1
然後,您也可以考慮使用流進行異步處理,並使用[有限狀態機](http://en.wikipedia.org/wiki/Finite-state_machine)進行解析,因此您不需要更多而不是同時在內存中的一個副本。當數據仍在接收時,您也可能已經開始處理數據。對於小塊可能比較慢,但對於大量數據可能會更快。 –