如何将NSArray写入NSOutputStream?

时间:2009-04-03 09:43:10

标签: objective-c cocoa arrays byte

我想发送一个NSArray,所以我必须先将它写入NSOutputStream。 方法应该是:

- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)length

我可以使用以下方法将数组的指针转换为uint8 _ t:

(uint8_t *)arr

但是如何获取数组的字节长度?我是否必须将数组保存到文件中并将其作为NSData读出来?

1 个答案:

答案 0 :(得分:2)

  

我可以使用:

将数组的指针转换为uint8 _ t
(uint8_t *)arr

那只是一个演员;它实际上并没有将数组转换为字节序列。即使您通过线路发送了阵列的私有存储,数组的内容也只是其他对象的内存地址。您的进程中的内存地址在接收过程中几乎肯定是不一样的 - 并且假设接收进程正在运行Cocoa并且期望NSArray!

您需要将数组的内容序列化为接收器能够处理的一些外部表示。您可以converting to a plist创建NSXMLDocumentgetting its data,或手动组合自定义格式表示,但不能单独使用强制转换。

  

但是如何获得数组的字节长度?

数组不是一系列字节;这是一个对象。因此,它没有长度,只有(作为一个数组)其中的对象数。在获得系列长度之前,您需要一系列字节。

  

我是否必须将数组保存到文件中并将其作为NSData读出来?

您需要获取数组的外部表示,最好是在NSData对象中。告诉它写一个文件并将文件重新读回来是一种方式,但有更好的方法,我在上面列出。