private void ReadData(ByteBuffer bytes) { // read the header ICUBinary.ReadHeader(bytes, FMT, new IsAcceptable()); // read indexes[] int count = bytes.GetInt32(); if (count < IX_TOP) { throw new IOException("indexes[0] too small in " + DATA_FILE_NAME); } indexes = new int[count]; indexes[0] = count; for (int i = 1; i < count; ++i) { indexes[i] = bytes.GetInt32(); } // read the trie trie = Trie2_16.CreateFromSerialized(bytes); int expectedTrieLength = indexes[IX_TRIE_SIZE]; int trieLength = trie.GetSerializedLength(); if (trieLength > expectedTrieLength) { throw new IOException(DATA_FILE_NAME + ": not enough bytes for the trie"); } // skip padding after trie bytes ICUBinary.SkipBytes(bytes, expectedTrieLength - trieLength); // read exceptions[] count = indexes[IX_EXC_LENGTH]; if (count > 0) { exceptions = ICUBinary.GetString(bytes, count, 0); } // read unfold[] count = indexes[IX_UNFOLD_LENGTH]; if (count > 0) { unfold = ICUBinary.GetChars(bytes, count, 0); } }