 <p>Given that characters can take a variable number of bytes this would be pretty tough to do without converting the bytes to characters with a <code>TextReader</code>.</p> <p>You could wrap up a <code>TextReader</code> and give it a <code>Seek</code> method that ensures enough characters have been loaded to satisfy each request.</p>