예제 #1
0
        public async Task <SqoTypeInfo> DeserializeSqoTypeInfoAsync(bool loadRealType)
        {
            byte[] headerSizeB = new byte[4];
            await file.ReadAsync(0, headerSizeB).ConfigureAwait(false);

            int headerSize = ByteConverter.ByteArrayToInt(headerSizeB);

            byte[] readFullSqoTypeInfo = new byte[headerSize];
            await file.ReadAsync(0, readFullSqoTypeInfo).ConfigureAwait(false);

            return(DeserializeSqoTypeInfoFromBuffer(readFullSqoTypeInfo, loadRealType));
        }
예제 #2
0
        private static async Task ShrinkNormalAsync(Siaqodb siaqodb)
        {
            var allOrderByPos = (await(from RawdataInfo ri in siaqodb
                                       where ri.IsFree == false
                                       select ri).ToListAsync()).OrderBy(a => a.Position).ToList();

            ISqoFile     file         = siaqodb.GetRawFile();
            MemoryStream memStream    = new MemoryStream();
            MemoryStream memStreamNew = new MemoryStream();

            byte[] fullFile = new byte[file.Length];

            await file.ReadAsync(0, fullFile);

            memStream.Write(fullFile, 0, fullFile.Length);

            for (int i = 0; i < allOrderByPos.Count; i++)
            {
                RawdataInfo rawi        = allOrderByPos[i];
                byte[]      actualBytes = new byte[rawi.Length];
                memStream.Seek(rawi.Position, SeekOrigin.Begin);
                memStream.Read(actualBytes, 0, actualBytes.Length);
                if (i == 0)
                {
                    rawi.Position = 0;
                    memStreamNew.Write(actualBytes, 0, actualBytes.Length);
                }
                else
                {
                    RawdataInfo prev = allOrderByPos[i - 1];
                    rawi.Position = prev.Position + prev.Length;
                    memStreamNew.Seek(rawi.Position, SeekOrigin.Begin);
                    memStreamNew.Write(actualBytes, 0, actualBytes.Length);
                }
            }
            for (int i = 0; i < allOrderByPos.Count; i++)
            {
                await siaqodb.StoreObjectAsync(allOrderByPos[i]);
            }
            file.Length = memStreamNew.Length;
            await file.WriteAsync(0, memStreamNew.ToArray());
        }
예제 #3
0
 public async Task ReadAsync(long pos, byte[] buffer)
 {
     await file.ReadAsync(pos, buffer).ConfigureAwait(false);
 }