Si dice qui msdn.microsoft.com/en-us/library/system.io.stream.read.aspx che i metodi Stream.Read
e Stream.Write
fanno avanzare automaticamente la posizione/l'offset nel flusso in modo tale perché gli esempi qui http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx e http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx cambiano manualmente l'offset?Impostazione dell'offset in un flusso
si fa a impostare solo l'offset in un ciclo se si conosce la dimensione del flusso e impostarlo a 0 se non si conosce la dimensione e l'utilizzo di un buffer?
// Now read s into a byte buffer.
byte[] bytes = new byte[s.Length];
int numBytesToRead = (int) s.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to 10.
int n = s.Read(bytes, numBytesRead, 10);
// The end of the file is reached.
if (n == 0)
{
break;
}
numBytesRead += n;
numBytesToRead -= n;
}
e
using (GZipStream stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress))
{
const int size = 4096;
byte[] buffer = new byte[size];
using (MemoryStream memory = new MemoryStream())
{
int count = 0;
do
{
count = stream.Read(buffer, 0, size);
if (count > 0)
{
memory.Write(buffer, 0, count);
}
}
while (count > 0);
return memory.ToArray();
}
}
... Che cosa? –
C'è una differenza tra gli offset interni in un flusso e gli offset/le lunghezze di cui bisogna preoccuparsi quando si leggono/scrivono dati tra un buffer e uno stream, e forse uno 2. stream. – nos
@sehe: incolpa il tuo sistema operativo. –