public static ReadableIndex DeserializeFromDisk(string filePath)
 {
     using (Stream stream = File.Open(filePath, FileMode.Open))
     {
         return(ReadableIndex.Deserialize(stream));
     }
 }
        public static ReadableIndex Deserialize(Stream stream)
        {
            var options = (IndexOptions)(new BinaryFormatter()).Deserialize(stream);

            var reader = new BinaryReader(stream);

            int documents = reader.ReadInt32();
            int storeSize = reader.ReadInt32();

            var index = new ReadableIndex(options, documents, storeSize);

            // documents
            for (var i = 0; i < documents; i++)
            {
                index._documents.Add(reader.ReadString());
            }
            for (var i = 0; i < documents; i++)
            {
                index._documentLength.Add(reader.ReadInt32());
            }

            // store
            for (int n = 0; n < storeSize; n++)
            {
                var keyLength = reader.ReadInt32();
                var key       = reader.ReadChars(keyLength);

                var listSize = reader.ReadInt32();
                var list     = new List <PostingEntry>(listSize);
                for (int l = 0; l < listSize; l++)
                {
                    list.Add(new PostingEntry(reader.ReadInt32(), reader.ReadUInt16()));
                }

                index._store.Add(key, list);
            }

            return(index);
        }