示例#1
0
        /// <summary>
        /// Non rented array input, Array is Input
        /// </summary>
        /// <param name="array"></param>
        /// <param name="readLength"></param>
        public ReadResult(byte[] array, int readLength)
        {
            if (array is null)
            {
                ThrowHelpers.ByteArrayCannotBeNull();
            }

            if ((uint)readLength > (uint)array.Length)
            {
                ThrowHelpers.ReadLengthCannotBeOutOfBounds();
            }

            Array                     = array;
            Source                    = null;
            ReadLength                = readLength;
            IsArrayRented             = false;
            ShouldDisposeStream       = false;
            ShouldResetStreamPosition = false;
        }
示例#2
0
        /// <summary>
        /// Reads the file header - first (16) bytes from the file
        /// </summary>
        /// <param name="file">The file to work with</param>
        /// <returns>Array of bytes</returns>
        public static ReadResult ReadFileHeader(FileInfo file)
        {
            if (file is null)
            {
                ThrowHelpers.FileInfoCannotBeNull();
            }

            if (!file.Exists)
            {
                ThrowHelpers.FileDoesNotExist(file);
            }

            FileStream fileStream = file.OpenRead();

            byte[] header = ArrayPool <byte> .Shared.Rent(MimeTypes.MaxHeaderSize);

            int bytesRead = fileStream.Read(header, 0, MimeTypes.MaxHeaderSize);

            return(new ReadResult(header, fileStream, bytesRead, isArrayRented: true, shouldDisposeStream: true, shouldResetStreamPosition: false));
        }
示例#3
0
        //TODO Figure out how to handle non-seekable Streams
        /// <summary>
        /// Takes a stream does, not dispose of stream, resets read position to beginning though
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="MaxHeaderSize"></param>
        /// <returns></returns>
        public static async Task <ReadResult> ReadHeaderFromStreamAsync(Stream stream, bool shouldDisposeStream = false, bool shouldResetStreamPosition = true)
        {
            if (stream is null)
            {
                ThrowHelpers.StreamCannotBeNull();
            }

            if (!stream.CanRead)
            {
                ThrowHelpers.CannotReadFromStream();
            }

            if (stream.CanSeek && stream.Position > 0)
            {
                stream.Seek(0, SeekOrigin.Begin);
            }

            byte[] header = ArrayPool <byte> .Shared.Rent(MimeTypes.MaxHeaderSize);

            int bytesRead = await stream.ReadAsync(header, 0, MimeTypes.MaxHeaderSize);

            return(new ReadResult(header, stream, bytesRead, isArrayRented: true, shouldDisposeStream, shouldResetStreamPosition));
        }