ReadBytes() static private méthode

static private ReadBytes ( Stream stream, byte buffer, int bytesToRead ) : void
stream Stream
buffer byte
bytesToRead int
Résultat void
Exemple #1
0
 internal bool LoadLocalHeaderExtraFieldAndCompressedBytesIfNeeded()
 {
     if (this._originallyInArchive)
     {
         this._archive.ArchiveStream.Seek(this._offsetOfLocalHeader, SeekOrigin.Begin);
         this._lhUnknownExtraFields = ZipLocalFileHeader.GetExtraFields(this._archive.ArchiveReader);
     }
     if (!this._everOpenedForWrite && this._originallyInArchive)
     {
         this._compressedBytes = new byte[checked ((IntPtr)this._compressedSize)];
         this._archive.ArchiveStream.Seek(this.OffsetOfCompressedData, SeekOrigin.Begin);
         ZipHelper.ReadBytes(this._archive.ArchiveStream, this._compressedBytes, (int)this._compressedSize);
     }
     return(true);
 }
 private static bool SeekBackwardsAndRead(Stream stream, byte[] buffer, out int bufferPointer)
 {
     if (stream.Position < (long)((int)buffer.Length))
     {
         int position = (int)stream.Position;
         stream.Seek((long)0, SeekOrigin.Begin);
         ZipHelper.ReadBytes(stream, buffer, position);
         stream.Seek((long)0, SeekOrigin.Begin);
         bufferPointer = position - 1;
         return(true);
     }
     stream.Seek((long)(-(int)buffer.Length), SeekOrigin.Current);
     ZipHelper.ReadBytes(stream, buffer, (int)buffer.Length);
     stream.Seek((long)(-(int)buffer.Length), SeekOrigin.Current);
     bufferPointer = (int)buffer.Length - 1;
     return(false);
 }
Exemple #3
0
 //Returns true if we are out of bytes
 private static Boolean SeekBackwardsAndRead(Stream stream, Byte[] buffer, out Int32 bufferPointer)
 {
     if (stream.Position >= buffer.Length)
     {
         stream.Seek(-buffer.Length, SeekOrigin.Current);
         ZipHelper.ReadBytes(stream, buffer, buffer.Length);
         stream.Seek(-buffer.Length, SeekOrigin.Current);
         bufferPointer = buffer.Length - 1;
         return(false);
     }
     else
     {
         Int32 bytesToRead = (Int32)stream.Position;
         stream.Seek(0, SeekOrigin.Begin);
         ZipHelper.ReadBytes(stream, buffer, bytesToRead);
         stream.Seek(0, SeekOrigin.Begin);
         bufferPointer = bytesToRead - 1;
         return(true);
     }
 }
Exemple #4
0
        // returns false if fails, will get called on every entry before closing in update mode
        // can throw InvalidDataException
        internal bool LoadLocalHeaderExtraFieldAndCompressedBytesIfNeeded()
        {
            string message;

            // we should have made this exact call in _archive.Init through ThrowIfOpenable
            Debug.Assert(IsOpenable(false, true, out message));

            // load local header's extra fields. it will be null if we couldn't read for some reason
            if (_originallyInArchive)
            {
                _archive.ArchiveStream.Seek(_offsetOfLocalHeader, SeekOrigin.Begin);

                _lhUnknownExtraFields = ZipLocalFileHeader.GetExtraFields(_archive.ArchiveReader);
            }

            if (!_everOpenedForWrite && _originallyInArchive)
            {
                // we know that it is openable at this point

                _compressedBytes = new byte[(_compressedSize / MaxSingleBufferSize) + 1][];
                for (int i = 0; i < _compressedBytes.Length - 1; i++)
                {
                    _compressedBytes[i] = new byte[MaxSingleBufferSize];
                }
                _compressedBytes[_compressedBytes.Length - 1] = new byte[_compressedSize % MaxSingleBufferSize];

                _archive.ArchiveStream.Seek(OffsetOfCompressedData, SeekOrigin.Begin);

                for (int i = 0; i < _compressedBytes.Length - 1; i++)
                {
                    ZipHelper.ReadBytes(_archive.ArchiveStream, _compressedBytes[i], MaxSingleBufferSize);
                }
                ZipHelper.ReadBytes(_archive.ArchiveStream, _compressedBytes[_compressedBytes.Length - 1], (int)(_compressedSize % MaxSingleBufferSize));
            }

            return(true);
        }