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