Re: increasing the size of a byte array and reading streams

From: David Sworder (GilGrissom_at_CSILasVegas.com)
Date: 02/13/04


Date: Fri, 13 Feb 2004 11:05:24 -0800


> As an extra question what is the difference between the two methods of
> reading the stream below (where buf is a byte array). Why do people
> tend to prefer the second method?? Is it purly to do with being able
> to read as much as possible if something goes wrong??

    There is nothing wrong with the first method. I use it all the time.
When you're reading a file, for example, and you know that the file is
exactly 'x' bytes long, there's no problem just creating a big byte array of
length 'x' and doing one massive read.
    There are times, however, when it makes sense to read a stream in small
chunks. For example, maybe you're writing a file sharing program and you
want your application to be able to deliver a 12gig file containing "The
Matrix Revolutions" to other users that might request it. You wouldn't want
to create a 12gig byte array and read in all of the bytes [this would be
impossible on a 32bit O/S anyway]. So you'd just read in a little bit at a
time, distributing various pieces of the file to users as needed.
    Another more common scenario where you want to might want to read in
small chunks is when you're reading from a network stream. Even if you know
that the stream will be exactly 'x' bytes, the bandwidth over the network is
pretty thin -- so instead of waiting for all 'x' bytes in one call, you
might want to read a little, go do something else while waiting for the data
to arrive, read a little more, etc.

>At the end of
> this message is the inflate method this is where I get stuck I know
> that I need a byte array but because I am decompressing a string I
> have no idea of how big the byte array will need to be in the end (the
> inflate and deflate methods will be in two separate exe's so I cann't
> just path the length of the original string). Us there a way to keep
> increasing the size of the byte array as I read more of it.

    There's a couple of ways to handle this. One solution is to use an
ArrayList. Each time you read a chunk of data into a byte array, store that
byte[] in your ArrayList. When you're done reading, reassemble all of the
byte[]s in your ArrayList into one long byte[].
    Another more practical approach would be to set up a secondary
MemoryStream. Whenever you read some bytes from your compressed stream,
write those uncompressed bytes to your secondary MemoryStream. When you're
done reading/writing bytes, call ToArray() on your secondary memory stream
to extract all of the bytes. Don't forget to Dispose() of this memory stream
when you're done with it!

-- 
Sincerely,
David Sworder
http://www.CodeFanatic.com


Relevant Pages

  • Re: Getting images into byte arrays
    ... If you insist on reading from the stream, I suspect you need to find a way ... > I want to get the ocntents of the JPEG image into a byte array. ... > Imports System.IO ...
    (microsoft.public.dotnet.framework)
  • Re: Getting images into byte arrays
    ... If you insist on reading from the stream, I suspect you need to find a way ... > I want to get the ocntents of the JPEG image into a byte array. ... > Imports System.IO ...
    (microsoft.public.dotnet.framework.drawing)
  • Re: Reading Zipped data from database record
    ... I used another program to extract the binary data into a file, ... not an array. ... How would I go about reading the array as a Zip stream? ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Really Stuck, Please Help
    ... I am not sure how to construct an array. ... Reading Master Log", of the "Copreco Master Log" workbook. ... Dim sourceBook As String ...
    (microsoft.public.excel.programming)
  • Re: Problem with a script
    ... a loop there becomes impractical. ... You still have them as uniquely named array indexes... ... writing the code twice will only ... reading your entire code and parsing it in their head, ...
    (comp.lang.php)