2009-04-03 7 views
1

NSArray를 보내려고하므로 먼저 NSOutputStream에 써야합니다. 방법은 다음과 같아야합니다NSArray를 NSOutputStream에 쓰는 방법은 무엇입니까?

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

내가 사용 _ t을 UINT8하는 배열의 포인터를 변환 할 수 있습니다

(uint8_t *)arr

을하지만 어떻게 배열의 바이트의 길이를 얻을? 배열을 파일에 저장하고 NSData로 읽어야합니까?

답변

2
내가 사용 _ t을 UINT8하는 배열의 포인터를 변환 할 수 있습니다

:

단지 캐스트의
(uint8_t *)arr 

; 실제로는 배열을 일련의 바이트로 변환하지 않습니다. 유선을 통해 배열의 개인 저장소를 보냈더라도 배열의 내용은 다른 개체에 대한 메모리 주소 일뿐입니다. 프로세스의 메모리 주소는 수신 프로세스에서 거의 동일하지 않습니다. 수신 프로세스가 Cocoa를 실행 중이며 NSArray를 예상한다고 가정합니다.

수신기의 내용을 수신기가 처리 할 수있는 외부 표현으로 직렬화해야합니다. converting to a plist을 사용하여 NSXMLDocumentgetting its data을 만들거나 직접 작성하지 않고 직접 사용자 정의 형식 표현을 조합 할 수 있습니다.

그러나 배열의 바이트 길이를 얻는 방법은 무엇입니까?

배열은 일련의 바이트가 아닙니다. 그것은 대상입니다. 따라서 길이가 없으며 배열에있는 객체의 수만 있습니다. 계열의 길이를 얻기 전에 일련의 바이트가 필요합니다.

파일에 배열을 저장하고 NSData로 읽어야합니까?

바람직하게는 NSData 객체에서 배열의 외부 표현을 가져와야합니다. 파일 자체에 (plist를 써서) 파일을 읽고 다시 읽는 것이 하나의 방법이지만, 위에 나열된 훨씬 더 좋은 방법이 있습니다.

관련 문제