2009-03-24 1 views
3

Я пытаюсь создать приложение для iPhone, хотя я совершенно новичок в Obj-C. Для одной проблемы я бы использовал ByteBuffer в Java, но я не вижу подходящего класса в документации Apple. Поэтому я, вероятно, должен реализовать это самостоятельно.Каков наилучший способ реализовать Java-подобный ByteBuffer в Obj-C?

Мой вопрос, как сделать это лучше всего:

  • Есть ли подобный класс в Obj-C? (Это было бы лучшим решением;))
  • Должен ли я это делать с использованием классов Obj-C, таких как NSData?
  • Или я должен оставаться с простым кодом C?
+0

Это действительно зависит от того, что вы пытаетесь сделать. Вы должны отредактировать свой вопрос, чтобы добавить немного больше контекста. – Alex

+0

Моя цель - реализовать полностью функциональную версию Obj-C java.nio.ByteBuffer. Просто хотел знать, что я должен использовать, чтобы добраться туда. – Koraktor

ответ

8

Возможно, вы хотите получить NSMutableData.

+0

+1 - это было бы так. –

+0

Хорошо ... у вас есть пример, как читать, например. поплавок из NSMutableData? Или любой другой тип данных? – Koraktor

+1

AFAIK таких методов нет, но вы можете реализовать их как категорию NSData, поэтому они могут использоваться с NSData и любым из его подклассов. Просто используйте getBytes: length: для извлечения байтов sizeof (float) и последующего выделения буфера. –

5

Мое воспоминание о java.nio.ByteBuffer (от работы с Java много лет назад) состоит в том, что ByteBuffer реализует последовательные чтения/записи в массив байтов. Это аналогично с NSInputStream подкрепленными NSData (для входа):

NSInputStream *inputStream = [NSInputStream inputStreamwithData:myData]; //assuming myData is NSData* 

float myFloat; 

if([inputStream hasBytesAvailable]) { // NO if you've already read to the end of myData 
    NSInteger bytesRead = [inputStream read:&myFloat maxLength:sizeof(myFloat)]; 
    NSAssert(bytesRead == sizeof(myFloat); 
} 

Вы можете сделать что-то подобное с NSOutputStream записи в NSData.

+0

Это выглядит довольно многообещающе. Большое спасибо. – Koraktor

+1

Мне любопытно посмотреть, как получается ваш порт, и будет очень заинтересован в использовании результата. Пожалуйста, звоните мне, когда он будет готов. –

+0

Я постараюсь запомнить. ;) – Koraktor

0

У меня есть аналогичный вопрос. ilya pointed my here with his answer.

Моя цель - реализовать полностью функциональную версию Obj-C java.nio.ByteBuffer. Просто хотел знать, что я должен использовать, чтобы получить там

Это будет ваш собственный класс.

Для моего случая я думаю, что следует использовать NSInputStream и NSOutputStream. Конечно, не NSMutableData как принято и в основном проголосовали.

Смежные вопросы