मैं सोच रहा था कि NSOutputStream
मानक आउटपुट पर रीडायरेक्ट करने का सबसे अच्छा तरीका क्या है।NSOutputStream मानक आउटपुट पर रीडायरेक्ट कैसे करें?
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];
वहाँ इस लक्ष्य को हासिल करने के लिए एक बेहतर तरीका है: तकनीक मैं अभी उपयोग कर रहा हूँ, एक निर्गम धारा है कि स्मृति के लिए लिखते हैं का उपयोग अपने डेटा मिलता है और है कि stdout में मुद्रित करने के लिए है? विशेष रूप से, मैं इस दृष्टिकोण के साथ दो चीजों के बारे में खुश नहीं हूँ:
कि
यह स्ट्रीम स्ट्रीम करने के लिए लिखा है डेटा के लिए अतिरिक्त स्मृति के लिए की जरूरत पुन: प्रयोज्य नहीं है - के बाद मैं से डेटा पुनः प्राप्त है यह स्ट्रीम
[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]
के माध्यम से, स्ट्रीम "रीसेट" नहीं है यानी मुझे इस विधि को केवल नए डेटा देने के लिए बाद की कॉल चाहिए, लेकिन यह मामला नहीं है। इसका मतलब यह है कि जब भी मैं stdout लिखता हूं, मुझे हर बार एक नया NSOutputStream बनाना होता है।
मुझे 'NSFileHandle' के बारे में पता था, लेकिन इसे 'NSOutputStream' के उप-वर्ग के अंदर लपेटना ऐसा कुछ नहीं था जिसे मैंने सोचा था। बहुत दिलचस्प है, और यह निश्चित रूप से काम करना चाहिए। –
जैसे ही मैंने सत्यापित किया है कि यह सही ढंग से काम करता है (मुझे ऐसा कुछ भी नहीं दिख रहा है जो इस के साथ गलत होना चाहिए)। –
यह बहुत अच्छी तरह से काम करता है। एकमात्र चेतावनी जो मैं जोड़ सकता हूं वह यह है कि 'NSOutputStream' विधियों को ओवरराइड करने के अलावा, इसे '-open' या' -close' जैसी कुछ' एनएसएसटीम 'विधियों को ओवरराइड करने की आवश्यकता हो सकती है। सहायता के लिए धन्यवाद। –