क्या जावा में एक नल आउटपुटस्ट्रीम है?


112

मुझे OutputStreamएक एपीआई के लिए निर्दिष्ट करने की आवश्यकता है जिसका मैं उपयोग कर रहा हूं, लेकिन मुझे वास्तव में आउटपुट की आवश्यकता नहीं है। क्या जावा के OutputStreamबराबर है > /dev/null?

जवाबों:


19

जावा 11 के बाद से, एक स्थिर उपयोगिता है जो वास्तव में आपकी आवश्यकता है, एक स्थिर कारखाना विधि OutputStream.nullOutputStream():

एक नया OutputStream देता है जो सभी बाइट्स को छोड़ देता है। लौटी हुई धारा शुरू में खुली है। पास () विधि को कॉल करके धारा बंद कर दी जाती है। बाद में (बंद) कॉल का कोई प्रभाव नहीं है।


बहुत बढ़िया, यह इंगित करने के लिए धन्यवाद! लेकिन "जावा 11 के बाद से"? मुझे लगता है कि जावा 11 केवल एक सप्ताह के लिए बाहर हो गया है।
ब्रैंडन यारब्रॉट

116
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}

15
यह भी आसानी से लागू किया जा सकता है जहाँ भी आपको कुछ इस तरह का उपयोग करने की आवश्यकता होती है: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
हंक शुल्त्


42

यह अभी तक उल्लेख नहीं किया गया है, इसलिए मैं अमरूद के बाइटस्ट्रीम भी जोड़ूंगाnullOutputStream () , कुछ लोग Apache Commons IO पर अमरूद पसंद कर सकते हैं या पहले से ही अपने प्रोजेक्ट में लगा सकते हैं।

नोट: यदि आप अमरूद (1.0 से 13.0 तक) के पुराने संस्करण का उपयोग करते हैं, तो आप com.google.io.NullOutputStream का उपयोग करना चाहते हैं ।


15

पहले से उपलब्ध कराए गए उत्तरों को फिर से लिखना -

जावा में एक NullOutputStreamवर्ग नहीं है । हालाँकि आप अपना स्वयं का रोल कर सकते हैं OutputStreamजो इसके लिए लिखे गए किसी भी डेटा को अनदेखा करता है - दूसरे शब्दों में write(int b), write(byte[] b)और write(byte[] b, int off, int len)इसमें खाली पद्धति वाले निकाय होंगे। यह आम आईओ NullOutputStreamवर्ग करता है।



3

मानक लाइब्रेरी AFAIK में नहीं, लेकिन आउटपुटस्ट्रीम में राइट को ओवरराइड करके बनाना मुश्किल नहीं होना चाहिए


यह क्यों ठुकरा दिया गया? यह वास्तव में इस समाधान को लागू करने के लिए तुच्छ है, जैसा कि मैकडॉवेल ने ऊपर दिखाया था।
pdxleif

3

नहीं, लेकिन इसे लागू करना बहुत आसान है।

यह प्रश्न देखें "कोडबेस से System.out.println को कैसे हटाएं"

और फिर आपको बस:

System.setOut( DevNull.out );

या कुछ इस तरह का :)

System.setOut (PrintStream)


मुझे त्रुटि मिलती है: "अंतिम चर के लिए एक मूल्य प्रदान नहीं कर सकता"
डेविड ग्रेसन


1

कस्बे में नया लड़का है, जो एक आकर्षण की तरह इस बात का ध्यान रखता है, कोड की कुछ पंक्तियों को काम करना चाहिए। इसका JDK 11 और nullWriter () वहां पेश किया गया है, जो इस बात का ध्यान रखता है। ऑपरेटिंग सिस्टम (OS) के बारे में चिंता किए बिना, एक ही पुरानी समस्या से निपटने के लिए यहां कोड जाता है।

String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();

आशा है कि यह किसी की मदद कर सकता है!


0

मुझे विश्वास है कि यह वही है जो आप खोज रहे हैं, मैं एक ही चीज की तलाश में था: यह मानक त्रुटि से आउटपुट धाराओं को पुनर्निर्देशित करने के लिए है, ProcessBuilder वस्तुओं में मानक आउट।

Blockquote

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Dom

यह विंडोज विशिष्ट है।
पेटर

-4

ByteArrayOutputStreamवह है जो आप चाहते हैं (यह मानते हुए कि एपीआई पाठ का उत्पादन करेगा)। बस एक नया पल।


2
यह एक बुरा विचार है क्योंकि आप इसे फेंकने के बजाय मेमोरी में डेटा जमा करेंगे। क्या होगा यदि लेखक आपके BAOS को 15 GB का कबाड़ लिख दे? यह हो सकता है।
अपने मॉड्स के साथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.