首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BinaryReader的奇怪行为

BinaryReader的奇怪行为
EN

Stack Overflow用户
提问于 2012-02-11 01:49:19
回答 3查看 273关注 0票数 1

我有一个基于套接字的应用程序,它在客户端使用BinaryReader对象公开接收到的数据。我一直在尝试调试阅读器中包含的数据不干净的问题……也就是说,我正在读取的缓冲区包含的旧数据超过了新数据的大小。

在以下代码中:

代码语言:javascript
复制
System.Diagnostics.Debug.WriteLine("Stream length: {0}", _binaryReader.BaseStream.Length);
byte[] buffer = _binaryReader.ReadBytes((int)_binaryReader.BaseStream.Length);

当我注释掉第一行时,数据不会像使用print line语句时那样变脏(或者不会变得经常变脏)。据我所知,从服务器端来的数据是干净的,所以我的套接字实现可能有一些问题。但是,有人知道为什么添加打印行会导致数据更频繁地变脏吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-11 01:59:54

您的二进制读取器看起来像是一个私有成员变量(如果前导下划线是一个tell tell符号)。

你的应用程序是多线程的吗?当你从你的binaryReader中读取数据时,如果另一个线程也试图使用你的use,你可能会遇到竞争的情况。即使没有这一行,你也会遇到问题,这一事实对我来说似乎很可疑。

票数 1
EN

Stack Overflow用户

发布于 2012-02-11 04:17:37

您确定您的读取逻辑正确吗?Stream.Length表示整个流的长度,而不是要读取的剩余数据的长度。

假设最初有100个字节可用。Length为100,并且BinaryReader更正读取的100个字节,并将流位置前进100。然后,又有20个字节到达。Length现在是120;但是,您的BinaryReader应该只读取20字节,而不是120字节。在第二次读取中请求的‘额外’100个字节将导致它阻塞或(如果流没有正确实现)中断。

票数 0
EN

Stack Overflow用户

发布于 2012-02-11 06:56:31

这个问题既愚蠢又无关紧要。然而,我相信我上面的阅读逻辑是正确的。问题是,我使用的_binaryReader是一个不属于我的类的引用,因此底层流被用坏数据重写。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9232357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档