Xceed .NET Libraries Documentation
Xceed.Compression Assembly / Xceed.Compression Namespace / CompressedStream Class / Read Method
An array of bytes. A maximum of count bytes are stored in this array.
The byte offset in buffer at which to begin storing the data decompressed from the inner stream.
The maximum number of bytes to be stored in buffer.
Example


In This Topic
    Read Method (CompressedStream)
    In This Topic
    Reads and decompresses a sequence of bytes from the inner stream.
    Syntax
    'Declaration
     
    Public Overrides Function Read( _
       ByVal buffer() As Byte, _
       ByVal offset As Integer, _
       ByVal count As Integer _
    ) As Integer
    'Usage
     
    Dim instance As CompressedStream
    Dim buffer() As Byte
    Dim offset As Integer
    Dim count As Integer
    Dim value As Integer
     
    value = instance.Read(buffer, offset, count)
    public override int Read( 
       byte[] buffer,
       int offset,
       int count
    )

    Parameters

    buffer
    An array of bytes. A maximum of count bytes are stored in this array.
    offset
    The byte offset in buffer at which to begin storing the data decompressed from the inner stream.
    count
    The maximum number of bytes to be stored in buffer.

    Return Value

    The total number of bytes read into the buffer. This may be less than the number of bytes requested if that many bytes aren't currently available, or zero if the end of the stream has been reached. Applications must check the return value to prevent data corruption.
    Remarks

    The CompressedStream object reads and decompresses data from the inner stream into a private buffer, and uses this buffer to satisfy Read requests. If a such a request cannot be satisfied, more data is read and decompressed from the inner stream.

    When Read returns a positive value, it means that there is more uncompressed data available in the CompressedStream buffer, but the end of the inner stream could have already been reached.

    When this method returns 0, it really means that all of the inner stream's data has been read and decompressed.

    If the reading process to decompress the byte array has already begun, CanWrite will always return false.

    Example
    The following example demonstrates how to read compressed data from a MemoryStream and decompress it to a FileStream using the CompressedStream class.
    Imports System.IO
    Imports Xceed.Compression
    
    ' If you do not want the inner stream to be closed by the CompressedStream
    ' then set the CompressedStream's Transient property to true.
    '
    ' The compressed data was compressed using the Compress example
    
    Dim sourceStream = New MemoryStream( compressedData )
    Dim compStream As New CompressedStream( sourceStream )
    Dim destinationStream As New FileStream("d:\data.txt", FileMode.OpenOrCreate)
    
    ' 32K at at time.
    Dim buffer(32768) As Byte
    Dim bytesRead As Integer = 0
    
    ' Loop until we have nothing more to read from the source stream
    
    Do
        bytesRead = compStream.Read(buffer, 0, buffer.Length)
        If bytesRead > 0 Then
            destinationStream.Write(buffer, 0, bytesRead)
        End If
    Loop Until bytesRead = 0
    
    ' Close the destination stream and the CompressedStream.
    '
    ' Because the CompressedStream will automatically close the source
    ' memory stream, there is no need to call Close once we are done with the stream.
    destinationStream.Close()
    compStream.Close()
    using System.IO;
    using Xceed.Compression;
    
    // Because the CompressedStream will automatically close the source
    // memory stream, there is no need to declare the memory stream within a using
    // statement or to call Close once we are done with the stream.
    //
    // If you do not want the inner stream to be closed by the CompressedStream
    // then set the CompressedStream's Transient property to true.
    //
    // The compressed data was compressed using the Compress example
    
    MemoryStream sourceStream = new MemoryStream( compressedData );
    
    using( CompressedStream compStream = new CompressedStream( sourceStream ) )
    {
        using( FileStream destinationStream = new FileStream( @"d:\data.txt", FileMode.OpenOrCreate ) )
        {
            // 32K at at time.
            byte[] buffer = new byte[ 32768 ];
            int bytesRead = 0;
            
            // Loop until we have nothing more to read from the source stream.
            while( ( bytesRead = compStream.Read( buffer, 0, buffer.Length ) ) > 0 )
            {
                destinationStream.Write( buffer, 0, bytesRead );
            }
        }
    }
    Requirements

    Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

    See Also

    Reference

    CompressedStream Class
    CompressedStream Members
    Base Implementation in Read