public void Read(BionReader reader) { reader.Read(BionToken.StartArray); reader.Read(BionToken.Integer); int wordCount = (int)reader.CurrentInteger(); Words.Clear(); Index.Clear(); Indexed = false; while (true) { reader.Read(); if (reader.TokenType == BionToken.EndArray) { break; } // NOTE: Not copying word. Must use a 'ReadAll' BufferedReader reader.Expect(BionToken.String); String8 value = reader.CurrentString8(); reader.Read(BionToken.Integer); int count = (int)reader.CurrentInteger(); // Add to List, but not Index. Index will be populated when first needed. Words.Add(value); Counts.Add(count); } // Set capacity exact to save RAM Words.SetCapacity(Words.LengthBytes); }