예제 #1
0
        public void Append(object[] values)
        {
            int offset = 0;

            byte[] row = new byte[rowSize];
            for (int index = 0; index < fields.Count; index++)
            {
                string      columnName = columnOrders[index];
                BinaryField field      = fields[columnName];
                switch (field.DataType)
                {
                case BinaryColumnTypeOption.Long:
                    BitConverter.GetBytes(Convert.ToInt64(values[index])).CopyTo(row, offset);
                    break;

                case BinaryColumnTypeOption.Double:
                    BitConverter.GetBytes((double)values[index]).CopyTo(row, offset);
                    break;

                case BinaryColumnTypeOption.Integer:
                    BitConverter.GetBytes((int)values[index]).CopyTo(row, offset);
                    break;

                case BinaryColumnTypeOption.String:
                    Encoding.ASCII.GetBytes(values[index].ToString().Substring(0, field.Size)).CopyTo(row, offset);
                    break;

                case BinaryColumnTypeOption.Guid:
                    ((Guid)values[index]).ToByteArray().CopyTo(row, offset);
                    break;
                }
                offset += field.Size;
            }
            writer.Write(row);
        }
예제 #2
0
        public void RegisterHeader(CacheHeaderInfo header)
        {
            string fileName = FileHelper.CreateCacheFileName(cacheFolder, header.IdentityCode, header.SubSection, header.CacheId, header.CacheType);

            BinaryField[] fields = new BinaryField[header.Columns.Count];
            int           index  = 0;

            foreach (CacheColumn column in header.Columns.Values)
            {
                BinaryColumnTypeOption binaryColumnType = BinaryColumnTypeOption.String;
                switch (column.DataType)
                {
                case CacheDataTypeOption.Double:
                    binaryColumnType = BinaryColumnTypeOption.Double;
                    break;

                case CacheDataTypeOption.Long:
                    binaryColumnType = BinaryColumnTypeOption.Long;
                    break;

                case CacheDataTypeOption.String:
                    binaryColumnType = BinaryColumnTypeOption.String;
                    break;

                case CacheDataTypeOption.Integer:
                    binaryColumnType = BinaryColumnTypeOption.Integer;
                    break;

                case CacheDataTypeOption.Guid:
                    binaryColumnType = BinaryColumnTypeOption.Guid;
                    break;
                }

                fields[index] = new BinaryField(column.Name, binaryColumnType, column.Size);

                index++;
            }

            if (!binaryFiles.ContainsKey(header.IdentityCode))
            {
                binaryFiles.Add(header.IdentityCode, new FileCacheItem(fileName, header, fields));
            }
        }
예제 #3
0
        public object[] Read()
        {
            int offset = 0;
            byte[] row = reader.ReadBytes(this.rowSize);

            List<object> values = new List<object>();

            if (row.Length > 0)
            {
                for (int index = 0; index < fields.Count; index++)
                {
                    string columnName = columnOrders[index];
                    BinaryField field = fields[columnName];
                    switch (field.DataType)
                    {
                        case BinaryColumnTypeOption.Long:
                            values.Add(BitConverter.ToInt64(row, offset));
                            break;
                        case BinaryColumnTypeOption.Double:
                            values.Add(BitConverter.ToDouble(row, offset));
                            break;
                        case BinaryColumnTypeOption.Integer:
                            values.Add(BitConverter.ToInt32(row, offset));
                            break;
                        case BinaryColumnTypeOption.Guid:
                            byte[] guidBytes= new byte[16];
                            for (int byteIndex = 0; byteIndex < 16; byteIndex++)
                            {
                                guidBytes[byteIndex]= row[offset + byteIndex];
                            }
                            values.Add(guidBytes);
                            break;
                        case BinaryColumnTypeOption.String:
                            values.Add(BitConverter.ToString(row, offset));
                            break;
                    }
                    offset += field.Size;
                }

            }
            return values.Count>0? values.ToArray(): null;
        }