ReadInput() static private method

Reads a number of characters from the current source Stream and writes the data to the target array at the specified index.
static private ReadInput ( System sourceStream, byte target, int start, int count ) : Int32
sourceStream System The source Stream to ReadPos from.
target byte Contains the array of characters ReadPos from the source Stream.
start int The starting index of the target array.
count int The maximum number of characters to ReadPos from the source Stream.
return System.Int32
Beispiel #1
0
        /// <summary>
        /// Skips n decompressed bytes in the stream.
        /// </summary>
        /// <param name="n">The number of bytes to skip.</param>
        public long Skip(long n)
        {
            int len = 512;

            if (n < len)
            {
                len = (int)n;
            }
            byte[] tmp = new byte[len];
            return((long)ZLibUtil.ReadInput(this, tmp, 0, tmp.Length));
        }
Beispiel #2
0
        /// <summary>
        /// Reads a number of decompressed bytes into the specified byte array.
        /// </summary>
        /// <param name="buffer">The array used to store decompressed bytes.</param>
        /// <param name="offset">The location in the array to begin reading.</param>
        /// <param name="count">The number of decompressed bytes to read.</param>
        /// <returns>The number of bytes that were decompressed into the byte array.</returns>
        /// <example> The following code demonstrates how to use the <c>ZInputStream</c> to decompresses data
        /// <code>
        /// [C#]
        /// private void decompressFile(string inFile, string outFile)
        ///	{
        ///	  /* Create a file to store decompressed data */
        ///		System.IO.FileStream decompressedFile = new System.IO.FileStream(@"c:\data\decompressed.dat", System.IO.FileMode.Create);
        ///		/* Open a file containing compressed data */
        ///		System.IO.FileStream compressedFile = new System.IO.FileStream(@"c:\data\compressed.dat", System.IO.FileMode.Open);
        ///		/* Create ZInputStream for decompression */
        ///		ZInputStream decompressionStream = new ZInputStream(compressedFile);
        ///
        ///		try
        ///		{
        ///				byte[] buffer = new byte[2000];
        ///				int len;
        ///				/* Read and decompress data */
        ///				while ((len = decompressionStream.Read(buffer, 0, 2000)) > 0)
        ///				{
        ///				  /* Store decompressed data */
        ///					decompressedFile.Write(buffer, 0, len);
        ///				}
        ///		}
        ///		finally
        ///		{
        ///			decompressionStream.Close();
        ///			decompressedFile.Close();
        ///			compressedFile.Close();
        ///		}
        ///	}
        /// </code>
        /// </example>
        public override int Read(byte[] buffer, int offset, int count)
        {
            if (count == 0)
            {
                return(0);
            }

            if (this.needCopyArrays && ZLibUtil.CopyLargeArrayToSmall.GetRemainingDataSize() > 0)
            {
                return(ZLibUtil.CopyLargeArrayToSmall.CopyData());
            }
            else
            {
                this.needCopyArrays = false;
            }

            bool call_finish = false;
            int  err;

            z.next_out       = buffer;
            z.next_out_index = offset;
            z.avail_out      = count;
            do
            {
                if ((z.avail_in == 0) && (!nomoreinput))
                {
                    // if buffer is empty and more input is available, refill it
                    z.next_in_index = 0;
                    z.avail_in      = ZLibUtil.ReadInput(_stream, buf, 0, ZLibUtil.zLibBufSize); //(ZLibUtil.zLibBufSize<z._avail_out ? ZLibUtil.zLibBufSize : z._avail_out));
                    if (z.avail_in == -1)
                    {
                        z.avail_in  = 0;
                        nomoreinput = true;
                    }
                }
                if ((z.avail_in == 0) && nomoreinput)
                {
                    call_finish = true;
                    break;
                }

                err = z.inflate(flush);
                if (nomoreinput && (err == (int)ZLibResultCode.Z_BUF_ERROR))
                {
                    return(-1);
                }
                if (err != (int)ZLibResultCode.Z_OK && err != (int)ZLibResultCode.Z_STREAM_END)
                {
                    throw new ZStreamException("inflating: " + z.msg);
                }
                if (nomoreinput && (z.avail_out == count))
                {
                    return(-1);
                }
            }while (z.avail_out == count && err == (int)ZLibResultCode.Z_OK);
            if (call_finish)
            {
                return(Finish(buffer, offset, count));
            }
            return(count - z.avail_out);
        }