我想发送一个 NSArray,所以我必须先将它写入 NSOutputStream。该方法应该是:
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)length
我可以使用以下方法将数组的指针转换为 uint8 _ t:
(uint8_t *)arr
但是如何获取数组的字节长度呢?我是否必须将数组保存到文件中并将其作为 NSData 读出?
我想发送一个 NSArray,所以我必须先将它写入 NSOutputStream。该方法应该是:
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)length
我可以使用以下方法将数组的指针转换为 uint8 _ t:
(uint8_t *)arr
但是如何获取数组的字节长度呢?我是否必须将数组保存到文件中并将其作为 NSData 读出?
我可以使用以下方法将数组的指针转换为 uint8 _ t:
(uint8_t *)arr
那只是一个演员表;它实际上并没有将数组转换为字节序列。即使您通过网络发送了数组的私有存储,数组的内容也只是其他对象的内存地址。你的进程中的内存地址在接收进程中几乎肯定是不一样的——假设接收进程正在运行 Cocoa 并且期待一个 NSArray!
您需要将数组的内容序列化为接收器能够处理的某些外部表示。您可以通过转换为 plist、创建NSXMLDocument并获取其数据或手动组装自定义格式表示来做到这一点——但不能单独使用强制转换。
但是如何获取数组的字节长度呢?
数组不是一系列字节;它是一个对象。因此,它没有长度,只有(作为数组)其中的对象数。您需要一系列字节才能获得系列的长度。
我是否必须将数组保存到文件中并将其作为 NSData 读出?
您需要获取数组的外部表示,最好是在 NSData 对象中。告诉它将自身写入(plist)到一个文件并读回文件是一种方法,但还有更好的方法,我在上面列出了。