【问题标题】:NSInputStream read: maxlength: returning way more bytes than maxlengthNSInputStream 读取:maxlength:返回的字节数比 maxlength 多
【发布时间】:2012-09-28 06:40:47
【问题描述】:

我有一个 iOS 应用程序,我在其中使用 NSInputStream(基于 CFReadStreamRef)从网络套接字读取。我不断从服务器获取数据并不断读取和处理它(使用 read:bytesBuffer maxLength:l)。前几次它工作正常,但在大约第 20-25 次读取时,此方法报告它读取了 HUGE 字节数,例如4,294,967,295 个字节,而我真正要求的最大值是 1-3MBytes。这很奇怪,似乎是 NSInputStream/CFReadStream API 中的一个错误。

我的应用程序最终崩溃,因为它试图将所有这些字节加载到一个没有为返回的字节数分配的缓冲区中(并且服务器一开始就没有返回这么多字节!)

以前有人遇到过这个问题吗?

谢谢!

【问题讨论】:

    标签: objective-c ios tcp nsinputstream


    【解决方案1】:

    read:maxLength: 的返回值是 NSInteger,失败时为负值。您可能正在将其转换为无符号整数类型,这会将负数转换为巨大的正数。

    【讨论】:

    • 特别是有符号的 32 位 -1 = 无符号的 32 位 4,294,967,295。这个(连同 255 和 65535)是每个程序员都应该立即识别的数字。 (你不必记住所有的数字,但是当你看到一个大约 42 亿的 int 时,它应该会引发一个危险信号。)
    • 谢谢大家!这确实是问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多