Gli esempi in questione sono c #, ma si applica a qualsiasi lingua.
Se hai una funzione che legge il contenuto da un flusso. Chi dovrebbe essere responsabile di garantire che la posizione dello stream sia corretta prima di leggere?
Il chiamante o la funzione che sta eseguendo la lettura?
per es.
Il chiamante posiziona lo stream:
public byte[] ReadBytesFromStream(Stream inputStream)
{
using (var ms = new MemoryStream())
{
inputStream.CopyTo(ms);
return ms.ToArray();
}
}
public void DoThingWithStream(Stream stream)
{
// .. do some stuff
stream.Position = 0;
var bytes = ReadBytesFromStream(stream);
// .. do some more stuff
}
Il lettore posiziona lo stream:
public byte[] ReadBytesFromStream(Stream inputStream)
{
inputStream.Position = 0;
using (var ms = new MemoryStream())
{
inputStream.CopyTo(ms);
return ms.ToArray();
}
}
public void DoThingWithStream(Stream stream)
{
// .. do some stuff
var bytes = ReadBytesFromStream(stream);
// .. do some more stuff
}
Il lettore che posiziona il flusso significa che posso richiamare la funzione più volte con lo stesso flusso e ottenere gli stessi byte.
Il chiamante che posiziona il flusso significa che
- È un po 'più di lavoro da preparare e se lanci il flusso molto spesso potrebbe esserci un grande riposizionamento in corso. Ma,
- Potrei usare la stessa funzione di lettura per leggere da un punto arbitrario nel flusso se lo volessi davvero.
Mi sono praticamente convinto che il chiamante dovrebbe fare il posizionamento, ma se questo è il caso allora ci sono circostanze in cui non dovrebbe ?