Czy w Javie istnieje Null OutputStream?


112

Muszę określić OutputStreaminterfejs API, którego używam, ale w rzeczywistości nie potrzebuję danych wyjściowych. Czy Java ma OutputStreamodpowiednik > /dev/null?

Odpowiedzi:


19

Od wersji Java 11 istnieje statyczne narzędzie, które robi dokładnie to, czego potrzebujesz, statyczna metoda fabryczna OutputStream.nullOutputStream():

Zwraca nowy OutputStream, który odrzuca wszystkie bajty. Zwrócony strumień jest początkowo otwarty. Strumień jest zamykany przez wywołanie metody close (). Kolejne wywołania funkcji close () nie mają żadnego efektu.


Świetnie, dziękuję za zwrócenie uwagi! Ale „od Java 11”? Myślę, że Java 11 była niedostępna dopiero od tygodnia.
Brandon Yarbrough

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

15
Można to również łatwo zaimplementować w dowolnym miejscu, używając czegoś takiego: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz




3

Nie w standardowej bibliotece AFAIK, ale nie powinno być trudno ją utworzyć, zastępując zapis w OutputStream


Dlaczego to zostało odrzucone? Wdrożenie tego rozwiązania jest rzeczywiście trywialne, jak pokazał McDowell powyżej.
pdxleif



1

W mieście pojawił się nowy chłopak, który zajmuje się tym jak marzenie, wystarczy kilka linijek kodu. Jego JDK 11 i nullWriter () zostały tam wprowadzone, które to załatwiają. Oto kod, który rozwiązuje ten sam stary problem, nowy sposób bez martwienia się o system operacyjny (OS).

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

Mam nadzieję, że to może komuś pomóc!


0

Uważam, że właśnie tego szukasz, szukałem tego samego: to jest do przekierowywania strumieni wyjściowych ze standardowego błędu, standardowo w obiektach ProcessBuilder.

Zablokować cytat

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

Dotyczy to systemu Windows.
peterh

-4

ByteArrayOutputStreamjest tym, czego chcesz (zakładając, że API będzie wyświetlało tekst). Po prostu utwórz nową instancję.


2
To zły pomysł, ponieważ będziesz gromadzić dane w pamięci, zamiast je wyrzucać. Co się stanie, jeśli autor zapisuje 15 GB śmieci na twoim BAOS? To może się zdarzyć.
traktuj dobrze swoje mody
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.