ฉันต้องการระบุOutputStream
API ที่ฉันใช้ แต่จริงๆแล้วฉันไม่ต้องการผลลัพธ์ Java มีOutputStream
เทียบเท่ากับ> /dev/null
?
ฉันต้องการระบุOutputStream
API ที่ฉันใช้ แต่จริงๆแล้วฉันไม่ต้องการผลลัพธ์ Java มีOutputStream
เทียบเท่ากับ> /dev/null
?
คำตอบ:
ตั้งแต่ Java 11 มียูทิลิตี้แบบคงที่ที่ตอบสนองสิ่งที่คุณต้องการวิธีการโรงงานแบบคงที่OutputStream.nullOutputStream()
:
ส่งคืน OutputStream ใหม่ซึ่งละทิ้งไบต์ทั้งหมด สตรีมที่ส่งคืนจะเปิดในตอนแรก สตรีมถูกปิดโดยเรียกเมธอด close () การเรียกเพื่อปิด () ในภายหลังจะไม่มีผล
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
@Override
public void write(int b) throws IOException {
}
}
OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
ดูเหมือนว่า Java จะไม่ได้ แต่ Apache Commons IO ทำ ดูสิ่งต่อไปนี้:
หวังว่าจะช่วยได้
มันไม่ได้กล่าวถึงยังดังนั้นฉันยังจะเพิ่มฝรั่ง 's ByteStreams nullOutputStream ()เนื่องจากบางคนอาจชอบ Guava มากกว่า Apache Commons IO หรือมีอยู่แล้วในโครงการของตน
หมายเหตุ:หากคุณใช้รุ่นเก่าของฝรั่ง (1.0-13.0), คุณต้องการที่จะใช้com.google.io.NullOutputStream
ทบทวนคำตอบที่ให้ไว้แล้ว -
Java ไม่มีNullOutputStream
คลาส อย่างไรก็ตามคุณสามารถม้วนของคุณเองโดยOutputStream
ไม่สนใจข้อมูลใด ๆ ที่เขียนลงไป - กล่าวอีกนัยหนึ่งwrite(int b)
คือwrite(byte[] b)
และwrite(byte[] b, int off, int len)
จะมีเนื้อหาของวิธีการที่ว่างเปล่า นี่คือสิ่งที่NullOutputStream
คลาสIO ทั่วไปทำ
ไม่ได้อยู่ในไลบรารีมาตรฐาน AFAIK แต่ไม่ควรยากที่จะสร้างขึ้นมาใหม่โดยการลบล้างการเขียนใน OutputStream
ไม่ แต่มันค่อนข้างง่ายที่จะนำไปใช้
ดูคำถามนี้"วิธีลบ System.out.println จาก codebase"
จากนั้นคุณต้อง:
System.setOut( DevNull.out );
หรืออะไรทำนองนั้น :)
Java 11 เพิ่มOutputStream.nullOutputStream ()
มีเด็กใหม่ในเมืองที่ดูแลอย่างมีเสน่ห์รหัสเพียงไม่กี่บรรทัดก็น่าจะใช้ได้ มันJDK 11และnullWriter ()ได้รับการแนะนำที่นั่นที่จะดูแลเรื่องนี้ ต่อไปนี้เป็นรหัสเพื่อจัดการกับปัญหาเดิม ๆ วิธีใหม่โดยไม่ต้องกังวลเกี่ยวกับระบบปฏิบัติการ (OS)
String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();
หวังว่านี่อาจช่วยใครบางคนได้!
ฉันเชื่อว่านี่คือสิ่งที่คุณกำลังมองหาฉันกำลังมองหาสิ่งเดียวกัน: นี่คือการเปลี่ยนเส้นทางสตรีมเอาต์พุตจากข้อผิดพลาดมาตรฐานออกมาตรฐานในอ็อบเจ็กต์ ProcessBuilder
Blockquote
pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
ByteArrayOutputStream
คือสิ่งที่คุณต้องการ (สมมติว่า API จะส่งออกข้อความ) เพียงแค่สร้างอินสแตนซ์ใหม่