如何在 C# 中将 BinaryReader 转换为 Stream?
我必须完整读取“.bin”文件并将流传递给函数。我用 BinaryReader 尝试过,它可以很好地逐字节读取值,我想将整个文件作为字符串流传递给我的函数。 StreamReader 的使用给出了垃圾信息,看起来 StreamReader 无法正确读取 bin 文件。
提前致谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不要将二进制数据作为
字符串
传递。相反,请使用与您可能从中读取它的任何Stream
分离的byte[]
。StreamReader
用于读取文本是正确的,因此您需要使用BinaryReader
或只是 直接使用Stream.Read()
方法。如果您正在读取的流允许搜索(通过CanSeek
属性),您可以发现它的Length
并一次性从流中读取所有字节。但是,如果流非常大或不支持查找,则在读取时需要更加精细,分块进行,直到
Read()
方法返回0< /code> (这意味着已到达流末尾)。
没有
StreamReader.ReadToEnd()
相当于读取二进制数据,但将其定义为扩展方法并不是很困难。
Don't pass binary data around as a
string
. Instead, usebyte[]
which is detached from anyStream
you might have read it from. It's correct thatStreamReader
is for reading text, so you need to useBinaryReader
or just theStream.Read()
method directly. If the stream you're reading from allows seeking (exposed through theCanSeek
property), you can discover itsLength
and read all bytes from the stream in one go.If, however, the stream is very large or doesn't support seeking, you need to be a bit more elaborate when reading by doing it in chunks until the
Read()
method returns0
(which means the end of the stream has been reached).There is no
StreamReader.ReadToEnd()
equivalent for reading binary data, but defining one as an extension method isn't very hard.