Có Null OutputStream trong Java không?


111

Tôi cần chỉ định một OutputStreamAPI mà tôi đang sử dụng, nhưng tôi thực sự không có nhu cầu về đầu ra. Java có OutputStreamtương đương với > /dev/null?

Câu trả lời:


18

Kể từ Java 11, có một tiện ích tĩnh thực hiện chính xác những gì bạn cần, một phương thức static factory OutputStream.nullOutputStream():

Trả về một Dòng đầu ra mới loại bỏ tất cả các byte. Luồng trả về ban đầu được mở. Luồng được đóng bằng cách gọi phương thức close (). Các lệnh gọi tiếp theo để đóng () không có hiệu lực.


Tuyệt vời, cảm ơn vì đã chỉ ra điều đó! Nhưng "kể từ Java 11"? Tôi nghĩ rằng Java 11 mới chỉ ra mắt được một tuần.
Brandon Yarbrough

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

15
Điều này cũng có thể dễ dàng thực hiện bất cứ nơi nào bạn cần nó sử dụng một cái gì đó như thế này: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz



15

Nhấn mạnh lại các câu trả lời đã được cung cấp -

Java không có một NullOutputStreamlớp. Tuy nhiên, bạn có thể cuộn của riêng bạn OutputStreammà bỏ qua bất kỳ dữ liệu nào được ghi vào nó - nói cách khác write(int b), write(byte[] b)write(byte[] b, int off, int len)sẽ có các phần thân phương thức trống. Đây là những gì NullOutputStreamlớp IO chung thực hiện.



3

Không có trong thư viện tiêu chuẩn AFAIK, nhưng không khó để tạo một thư viện bằng cách ghi đè trong OutputStream


Tại sao điều này bị phản đối? Thực sự là tầm thường để thực hiện giải pháp này, như McDowell đã chỉ ra ở trên.
pdxleif



1

Có một chàng trai mới trong thị trấn, chăm sóc điều này như một cái duyên, chỉ cần vài dòng mã là có tác dụng. Nó JDK 11nullWriter () đã được giới thiệu ở đó, mà sẽ chăm sóc về điều này. Đây là mã để giải quyết cùng một vấn đề cũ, theo cách mới mà không cần lo lắng về Hệ điều hành (OS).

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

Hy vọng điều này có thể giúp một ai đó!


0

Tôi tin rằng đây là những gì bạn đang tìm kiếm, tôi cũng đang tìm kiếm điều tương tự: Đây là để chuyển hướng các luồng đầu ra từ lỗi chuẩn, chuẩn trong các đối tượng ProcessBuilder.

Blockquote

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

Đây là Windows cụ thể.
peterh

-4

ByteArrayOutputStreamlà những gì bạn muốn (giả sử rằng API sẽ xuất ra văn bản). Chỉ cần tạo một cái mới.


2
Đây là một ý tưởng tồi vì bạn sẽ tích trữ dữ liệu trong bộ nhớ thay vì vứt nó đi. Điều gì sẽ xảy ra nếu người viết ghi 15 GB rác vào BAOS của bạn? Nó có thể xảy ra.
đối xử tốt với các mod của bạn vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.