Чи є Nuva OutputStream на Java?


112

Мені потрібно вказати OutputStreamінтерфейс API, який я використовую, але насправді у мене немає потреби у виході. Чи має Java OutputStreamеквівалент > /dev/null?

Відповіді:


19

Оскільки Java 11, існує статична утиліта, яка робить саме те, що вам потрібно, статичний заводський метод OutputStream.nullOutputStream():

Повертає новий OutputStream, який відкидає всі байти. Повернений потік спочатку відкритий. Потік закривається викликом методу close (). Подальші дзвінки закрити () не мають ефекту.


Дивовижний, дякую, що вказали на це! Але "з часу Java 11"? Я думаю, що Java 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) { } };
Hank Schultz


42

Це ще не згадується, так що я буду також додати гуави «s ByteStreams . nullOutputStream () , як деякі можуть віддати перевагу Guava над IO Apache Commons або вже є у своєму проекті.

Примітка. Якщо ви використовуєте старішу версію Guava (від 1,0 до 13,0), ви хочете використовувати com.google.io.NullOutputStream .


15

Перевірка вже наданих відповідей -

У Java немає NullOutputStreamкласу. Однак ви можете скачати свій власний, OutputStreamякий ігнорує будь-які записані до нього дані - іншими словами write(int b), write(byte[] b)і у вас write(byte[] b, int off, int len)будуть порожні органи методу. Це те, що робить загальний IO NullOutputStreamклас.



3

Не в стандартній бібліотеці AFAIK, але створити її не повинно бути складно, перезаписавши запис у OutputStream


Чому це було знято? Це реально банально реалізувати це рішення, як показав МакДауелл вище.
pdxleif

3

Ні, але це досить просто втілити в життя.

Дивіться це питання "Як видалити System.out.println з кодової бази"

І тоді вам просто потрібно:

System.setOut( DevNull.out );

Або щось подібне :)

System.setOut (PrintStream)


Я отримую помилку: "не можу призначити значення остаточній змінній"
Девід Грейсон


1

У містечку є новий хлопчик, який опікується цим, як принадністю, лише кілька рядків коду повинні працювати. Її JDK 11 та nullWriter () були представлені там, що опікується цим. Тут іде код для вирішення тієї ж старої проблеми, новий спосіб, не турбуючись про операційну систему (ОС).

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

Сподіваюся, це може комусь допомогти!


0

Я вважаю, що це те, що ви шукаєте, я шукав те саме: Це для перенаправлення вихідних потоків зі стандартної помилки, стандартної в об'єктах ProcessBuilder.

Блок-котирування

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Дом

Це специфічно для Windows.
peterh

-4

ByteArrayOutputStreamце те, що ви хочете (якщо припустити, що API буде виводити текст). Просто приміркуйте нове.


2
Це погана ідея, оскільки ви будете накопичувати дані в пам'яті, а не викидати їх. Що робити, якщо письменник записує 15 Гб небажаного у ваш BAOS? Це могло статися.
ставитесь до своїх модників
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.