2010-01-24 66 views
12

除了匿名類(new OutputStream() { ... }),任何人都可以提出的new FileOutputStream("/dev/null")也適用於Windows道德等價?平臺無關的/ dev/null的輸出水槽的Java

萬一有人在想「這是什麼呢?」

我有一個程序,做了一致性分析上的文件。它有一個'詳細'選項。當詳細選項打開時,我想看到很多輸出。該程序並不着急,它是一個工具,所以不是寫所有這些額外的if語句來測試我是否需要輸出,我只是想在不需要時將它寫入比特桶。

+0

爲什麼你不只是要丟棄的數據? – 2010-01-24 17:38:30

+0

@湯姆霍廷 - 編輯的解決方案。 – bmargulies 2010-01-24 17:44:50

+0

好的。我以爲你「匿名課堂」只是做什麼@iseletsk建議。 – 2010-01-24 19:39:17

回答

18

您可以使用NullOutputStream從Apache的百科全書 https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/output/NullOutputStream.html

或者只是實現自己的

package mypackage; 

import java.io.OutputStream; 
import java.io.IOException; 

public class NullOutputStream extends OutputStream { 
    public void write(int i) throws IOException { 
     //do nothing 
    } 
} 
+3

(空對象模式,特例模式的一個特例。)(我會添加一個覆蓋(帶@覆蓋)write(int,int,byte [])'添加(儘管可能無關緊要)性能。我一直使用null對象的單個實例,但我想你可能會遇到外部鎖定問題('Reader' /'Writer's在這裏與裝飾器有問題)。)(這個評論包含一個故意的錯誤。) – 2010-01-24 19:43:31

+0

關於'@ Override'的好處,它會吸收故意的錯誤。 – trashgod 2010-01-24 21:21:18

+0

我想覆蓋所有的「寫()」方法。我猜JVM可能足夠聰明,可以發現循環寫入的數組仍然是空操作,並將它們視爲無操作,但我討厭依賴於JVM運行時優化。 – 2012-08-15 18:47:18

4

NUL適用於Windows NT,但是,這並不在* NIX工作。

output = new FileOutputStream("NUL"); 

更好地使用Commons IONullOutputStream,而不是獨立於平臺。

+1

NUL不適用於Unix。這是一個DOS remniscense。 – 2010-01-24 17:35:25

+0

謝謝您的確認。沒有一個nix平臺在手邊測試:) – BalusC 2010-01-24 17:36:53

+0

記住如果我編輯只保留Commons IO的建議? – bmargulies 2010-01-24 17:45:27