Пример #1
0
        private object EnsureSuffixArray(string filename, byte[] image)
        {
            var    fsSvc   = Services.RequireService <IFileSystemService>();
            var    diagSvc = Services.RequireService <IDiagnosticsService>();
            Stream?stm     = null;

            try
            {
                if (fsSvc.FileExists(filename))
                {
                    stm = fsSvc.CreateFileStream(filename, FileMode.Open, FileAccess.Read);
                    try
                    {
                        var sSuffix = (int[])new UbjsonReader(stm).Read() !;
                        return(SuffixArray.Load(image, sSuffix));
                    }
                    catch (Exception ex)
                    {
                        diagSvc.Warn("Unable to load suffix array {0}. {1}", filename, ex.Message);
                    } finally
                    {
                        stm.Close();
                    }
                }
                var sa = SuffixArray.Create(image);
                stm = fsSvc.CreateFileStream(filename, FileMode.Create, FileAccess.Write);
                new UbjsonWriter(stm).Write(sa.Save());
                return(sa);
            }
            finally
            {
                if (stm != null)
                {
                    stm.Dispose();
                }
            }
        }