/// <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> /// 格式化ajax字符串 /// </summary> /// <param name="jsStream">JS字符流</param> /// <param name="formatStream">格式化JSON字符流</param> internal static unsafe void FormatJavascript(TmphCharStream jsStream, TmphUnmanagedStream formatStream) { var length = formatLength(jsStream); if (length == 0) { if (jsStream.Length != 0) formatQuote(jsStream, formatStream); return; } length += jsStream.Length; formatStream.PrepLength(length <<= 1); for (char* start = jsStream.Char, write = (char*)(formatStream.CurrentData), end = start + jsStream.Length; start != end; ++start) { if (*start == Quote) *write++ = '"'; else if (*start == '\n') { *(int*)write = ('n' << 16) + '\\'; write += 2; } else if (*start == '\r') { *(int*)write = ('r' << 16) + '\\'; write += 2; } else { if (*start == '"' || *start == '\\') *write++ = '\\'; *write++ = *start; } } formatStream.Unsafer.AddLength(length); }
/// <summary> /// 格式化ajax字符串 /// </summary> /// <param name="jsStream">js字符流</param> /// <param name="formatStream">格式化JSON字符流</param> private static unsafe void formatQuote(TmphCharStream jsStream, TmphUnmanagedStream formatStream) { var length = jsStream.Length; char* start = jsStream.Char, end = start + length; formatStream.PrepLength(length <<= 1); for (var write = (char*)(formatStream.CurrentData); start != end; ++start) *write++ = *start == Quote ? '"' : *start; formatStream.Unsafer.AddLength(length); }
/// <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); } } }