/// <summary> /// 中文分词词语集合写入文本文件 /// </summary> private unsafe static void writeTxtFile() { string[] words = Words; using (TmphUnmanagedStream wordStream = new TmphUnmanagedStream()) { *(int*)wordStream.Data = words.Length; wordStream.Unsafer.AddLength(sizeof(int)); foreach (string word in words) { wordStream.Write(word); wordStream.Write((char)0); } TmphSubArray<byte> data = IO.Compression.TmphStream.Deflate.GetCompress(wordStream.GetArray(), 0); using (FileStream fileStream = new FileStream(Laurent.Lee.CLB.Config.TmphSearch.Default.WordTxtFileName, FileMode.Create, FileAccess.Write, FileShare.None)) { fileStream.Write(data.Array, data.StartIndex, data.Count); } } }
/// <summary> /// 获取解压数据 /// </summary> /// <returns>解压数据</returns> public unsafe TmphSubArray<byte> Get(TmphMemoryPool memoryPool) { if (memoryPool == null) { var data = TmphUnmanagedPool.StreamBuffers.Get(); try { using (dataStream = new TmphUnmanagedStream(data.Byte, TmphUnmanagedPool.StreamBuffers.Size)) { get(); return new TmphSubArray<byte>(dataStream.GetArray()); } } finally { TmphUnmanagedPool.StreamBuffers.Push(ref data); } } else { var data = memoryPool.Get(); try { fixed (byte* dataFixed = data) { using (dataStream = new TmphUnmanagedStream(dataFixed, data.Length)) { get(); if (dataStream.Data == dataFixed) { var TmphBuffer = data; data = null; return TmphSubArray<byte>.Unsafe(TmphBuffer, 0, dataStream.Length); } return new TmphSubArray<byte>(dataStream.GetArray()); } } } finally { memoryPool.Push(ref data); } } }