Apakah ada OutputStream Null di Java?

112

Saya perlu menentukan OutputStreamuntuk API yang saya gunakan, tetapi sebenarnya saya tidak membutuhkan output. Apakah Java memiliki OutputStreampadanan dengan > /dev/null?

Brandon Yarbrough
sumber

Jawaban:

19

Sejak Java 11, ada utilitas statis yang melakukan apa yang Anda butuhkan, metode pabrik statis OutputStream.nullOutputStream():

Mengembalikan OutputStream baru yang membuang semua byte. Aliran yang dikembalikan awalnya terbuka. Aliran ditutup dengan memanggil metode close (). Panggilan berikutnya ke close () tidak berpengaruh.

leventov.dll
sumber
Luar biasa, terima kasih telah menunjukkannya! Tapi "sejak Java 11"? Menurut saya Java 11 baru keluar satu minggu.
Brandon Yarbrough
116
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}
McDowell
sumber
15
Ini juga dapat dengan mudah diterapkan di mana pun Anda membutuhkannya menggunakan sesuatu seperti ini: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz
42

Ini tidak disebutkan belum, jadi saya juga akan menambahkan Jambu 's ByteStreams . nullOutputStream () , karena beberapa orang mungkin lebih memilih Guava daripada Apache Commons IO atau sudah memilikinya dalam proyek mereka.

Catatan: Jika Anda menggunakan Guava versi lama (dari 1.0 hingga 13.0), Anda ingin menggunakan com.google.io.NullOutputStream .

haylem
sumber
15

Mengulangi jawaban yang sudah diberikan -

Java tidak memiliki NullOutputStreamkelas. Namun Anda dapat menggulung milik Anda sendiri OutputStreamyang mengabaikan data apa pun yang tertulis padanya - dengan kata lain write(int b), write(byte[] b)dan write(byte[] b, int off, int len)akan memiliki badan metode kosong. Inilah yang dilakukan kelas Common IO NullOutputStream.

Vineet Reynolds
sumber
3

Tidak di pustaka standar AFAIK, tetapi seharusnya tidak sulit untuk membuatnya dengan mengganti tulis di OutputStream

Uri
sumber
Mengapa ini mendapat suara negatif? Memang sepele untuk menerapkan solusi ini, seperti yang ditunjukkan McDowell di atas.
pdxleif
1

Ada anak laki-laki baru di kota, yang mengurus ini seperti pesona, hanya beberapa baris kode yang seharusnya berfungsi. Its JDK 11 dan nullWriter () telah diperkenalkan di sana, yang mengurus ini. Ini dia kode untuk menangani masalah lama yang sama, cara baru tanpa mengkhawatirkan Sistem Operasi (OS).

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

Semoga ini dapat membantu seseorang!

Anak Merah
sumber
0

Saya percaya bahwa ini yang Anda cari, saya mencari hal yang sama: Ini untuk mengarahkan aliran keluaran dari kesalahan standar, standar di objek ProcessBuilder.

Blockquote

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Dom
Dominik
sumber
Ini khusus Windows.
peterh
-4

ByteArrayOutputStreamadalah yang Anda inginkan (dengan asumsi bahwa API akan mengeluarkan teks). Buat saja yang baru.

pergi
sumber
2
Ini adalah ide yang buruk karena Anda akan mengakumulasi data dalam memori alih-alih membuangnya. Bagaimana jika penulis menulis 15 GB sampah ke BAOS Anda? Itu mungkin terjadi.
perlakukan mod Anda dengan baik