2010-07-23 5 views
1

Lors du portage d'un programme Java sur Cocoa, j'ai rencontré le programme utilisant java.io.Reader et ses sous-classes. Je ne suis pas très familier avec ce qu'ils font, donc je ne peux pas trouver un bon remplacement. Est-ce que quelqu'un a de bonnes recommandations sur les remplacements ou dois-je le réécrire?Cocoa équivalente aux classes Java de Java

+0

La plupart d'entre nous ne savons plus ce qu'est un java.io.Reader que vous, ce qui signifie que nous ne pouvons en aucun cas suggérer un équivalent. Vous devriez * directement * décrire ce que vous voulez; alors seulement pouvons-nous recommander quelque chose qui le fournit. –

+0

Merci. Je vais devoir fouiller dans le code pour trouver comment ils l'utilisent. J'espérais changer leur code le moins possible pour éviter les bugs, mais il n'y a pas moyen de contourner ça ici. – CajunLuke

+1

@Peter Hosey - un Java a à I/O construit: Streams et lecteurs. Les flux fonctionnent avec des données binaires. Les lecteurs fonctionnent avec des données de caractères (unicode et codages). Comme NSStrings, tous les caractères Java sont UTF-16. Avec les lecteurs, il est trivial, par exemple, d'ouvrir un fichier et de lire 5 "caractères", et le lecteur fait tout le codage et le décodage pour vous. NSString ne vous donne pas cela, et il ne semble pas y avoir un ensemble équivalent de fonctions de bibliothèque dans les frameworks Apple. –

Répondre

1

Les lecteurs Java ne sont que des versions "objectivées" des opérations de lecture de fichiers blocs. En Objective C, vous avez accès à la bibliothèque C. Cela vous donne fopen, fread, fclose, qui sont des fonctions pour lire les fichiers de données brutes bloc par bloc. N'est-ce pas tout ce qui est vraiment nécessaire? Ensuite, si vous avez besoin de lire des entiers par exemple, vous venez de convertir les blocs de données (void *) en (int *).

Vous pourriez soutenir qu'un lecteur Java est plus abstrait. Oui, il y a des sous-classes pour lire des choses de n'importe où, pas seulement des fichiers. Mais si vous portez un programme existant, vous savez déjà si la source de données est un fichier ou non.

+0

Les classes Java de Java traitent les difficultés de travailler avec des caractères multi-octets. Ce n'est pas aussi simple que de tirer un tampon d'octets à la fois, puis de les convertir en NSStrings. – TJez

+0

@ TroyJ Je pense que NSString a initWithBytes: length: encoding: juste pour ça. –

+0

Jetez un oeil à http://stackoverflow.com/questions/25552673 pour voir combien de travail est impliqué juste pour obtenir cette méthode à se comporter utilement lors de la diffusion. Reader gère également le préfixe de flux unicode pour détecter automatiquement le codage. Le lecteur et les sous-classes sont juste un ensemble très simple et puissant de classes. Je suis vraiment choqué rien comme ça existe même dans les bibliothèques de tiers. – TJez