Je me demandais quel est le meilleur moyen de rediriger NSOutputStream
vers la sortie standard. La technique que je me sers est en ce moment d'utiliser un flux de sortie qui écrit à la mémoire, obtenir ses données et imprimer que la sortie standard:Comment faire pour rediriger NSOutputStream vers la sortie standard?
NSOutputStream *stream = [[NSOutputStream alloc] initToMemory];
[stream open];
// calls to stream's -write:maxLengh:
NSData *data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
printf("%s", [string UTF8String]);
[stream close];
Y at-il une meilleure façon d'y parvenir? Plus précisément, je ne suis pas content de deux choses avec cette approche:
Le besoin de mémoire supplémentaire pour les données écrites pour diffuser
Ce flux n'est pas réutilisable - après avoir récupéré les données de ce flux via
[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]
, le flux n'est pas "réinitialisé" c'est-à-dire que je veux que les appels suivants à cette méthode ne me donnent que de nouvelles données, mais ce n'est pas le cas. Cela signifie que je dois créer un nouveau NSOutputStream après chaque écriture dans stdout.
Je connaissais 'NSFileHandle', mais envelopper dans une sous-classe de' NSOutputStream' n'est pas quelque chose que je pensais. Très intéressant, et ça devrait certainement marcher. –
Je vais accepter votre réponse dès que j'ai vérifié que cela fonctionne correctement (je ne vois pas tout ce qui devrait aller mal avec cela si). –
Cela fonctionne très bien. La seule mise en garde que je peux ajouter est qu'en dehors des méthodes de remplacement de 'NSOutputStream', il peut être nécessaire de remplacer certaines méthodes' NSStream' comme '-open' ou' -close'. Merci pour l'aide. –