Cómo saltar más eficiente un número de bytes en cualquier Stream
?Cómo saltar bytes en una corriente
Si es posible, me gustaría llegar o lanzará una EndOfStreamException
al tratar de saltar más allá del final de la secuencia.
estoy escribiendo una corriente de encargo Reader
para ISO 9660 tipos de datos primitivos, y esto puede implicar una gran cantidad de saltar en corrientes seekable y no seekable, ambos números pequeños (4) y un gran número (2048) de bytes. Por lo tanto, quiero implementar un método Skip(int count)
que es un poco más eficiente que leer y descartar los bytes omitidos.
Por ejemplo, en una corriente seekable que puede ser que stream.Position += 4
, pero esto no produce una EndOfStreamException
la hora de buscar más allá del final de la corriente, y que no sé cómo probar que sin necesidad de leer algo. Para los flujos no seekable, el establecimiento de Position
no es ni siquiera una opción, pero la lectura y, posteriormente, descartando un gran número de bytes y la asignación de matrices de bytes no utilizados parece muy derrochador.
Francamente, creo que lo que usted ha descrito (comprobando 'CanSeek' y, o bien el uso de' Seek' o leer + descartes) es más o menos "ella". Tal vez podrías arriesgarte a leer '.Length' en el escenario' CanSeek', pero: también debes manejarlo con una excepción; No estoy seguro de que 'CanSeek' * garantice * una implementación' Length'. –