2009-03-24 6 views
3

J'essaie de créer une application pour l'iPhone, même si je suis complètement nouveau à Obj-C. Pour un problème, j'utiliserais un ByteBuffer en Java, mais je ne vois aucune classe appropriée dans la documentation d'Apple. Donc je dois probablement l'implémenter tout seul.Quelle est la meilleure façon d'implémenter un ByteBuffer de type Java dans Obj-C?

Ma question est, comment faire le mieux:

  • Y at-il une classe similaire dans Obj-C? (Ce serait la meilleure solution;))
  • Devrais-je le faire en utilisant des classes Obj-C comme NSData?
  • Ou devrais-je rester avec le code C simple?
+0

Cela dépend vraiment de ce que vous essayez de faire. Vous devriez éditer votre question pour ajouter un peu plus de contexte. – Alex

+0

Mon but est d'implémenter une version Obj-C entièrement fonctionnelle de java.nio.ByteBuffer. Je voulais juste savoir ce que je devrais utiliser pour y arriver. – Koraktor

Répondre

8

Vous souhaitez probablement NSMutableData.

+0

+1 - ce serait ça. –

+0

Ok ... avez-vous un exemple de lecture d'un e-mail, par exemple? un flottant de NSMutableData? Ou tout autre type de données? – Koraktor

+1

AFAIK il n'y a pas de telles méthodes, mais vous pouvez les implémenter vous-même comme une catégorie de NSData, de sorte qu'ils sont utilisables avec NSData et l'une de ses sous-classes. Utilisez simplement getBytes: length: pour récupérer sizeof (float) octets, puis lancer le buffer. –

5

Mon souvenir de java.nio.ByteBuffer (de travailler avec Java beaucoup de lunes il ya) est que ByteBuffer implémente des lectures séquentielles/écritures à un tableau d'octets. Ceci est analogue à un NSInputStream soutenu par un NSData (pour l'entrée):

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); 
} 

Vous pouvez faire quelque chose de similaire avec une écriture NSOutputStream à un NSData.

+0

Cela semble très prometteur. Merci beaucoup. – Koraktor

+1

Je suis curieux de voir comment votre port se révèle et serait très intéressé par l'utilisation du résultat. S'il vous plaît, ping-moi quand c'est prêt. –

+0

Je vais essayer de me souvenir. ;) – Koraktor

0

J'ai une question similaire. ilya pointed my here with his answer.

Mon objectif est de mettre en œuvre une version Obj-C entièrement fonctionnelle de java.nio.ByteBuffer. Je voulais juste savoir ce que je devrais utiliser pour obtenir il

Ce sera votre classe personnalisée. Pour mon cas, je pense que NSInputStream et NSOutputStream devraient être utilisés. Pour sûr, pas NSMutableData comme est la réponse acceptée et surtout voté.

Questions connexes