2013-02-05 58 views
4

此問題與this one(某種程度上)有關。Java:與InputStream和OutputStream的通用接口

基本上,我希望做一個函數,就像這樣:

public InputOutputStream func() 
{ 
    if (condition) 
    { 
     // open a file stream and convert to InputOutputStream 
    } 
    else 
    { 
     // make an InputOutputStream from string 
    } 
} 

幾個問題就出來了:

  • 我找不到任何地方像類InputOutputStream。它只是InputStreamOutputStream及其變體(如InputDataStream,OutputDataStream等)。有一個嗎?我需要一個支持讀寫操作的流。
  • 如何從文件製作InputOutputStream
  • 如何從字符串中製作InputOutputStream

對於C++ InputOutputStreamstd::iostream。我可以毫無問題地將std::fstreamstd::stringstream轉換成它。它可以在Java中訪問嗎?

謝謝。

+1

CHeck out:http://ostermiller.org/convert_java_outputstream_inputstream.html但我認爲這比根據條件使用你需要的更多的工作 –

+1

如果你想讀取和寫入文件,可以使用'RandomAccessFile ',或者打開'InputStream',讀取,關閉,然後打開'OutputStream',寫入並關閉。 –

回答

3

您可以考慮使用RandomAccessFile。

+0

不能強迫自己像Java程序員那樣思考。 C++仍然擁有我的大腦。可能會有所幫助。謝謝。 – maverik

+1

這是一個很少使用的類。我會更傾向於實際審查需求。 – EJP

1

Java中沒有InputOutputStream。如果你想DIY,請按照下面的說明。如果擴展abstract class,請使用Javadoc確保您每abstract方法覆蓋;沒有那麼多。

創建一個使用兩個流的類,一個是InputStream和一個OutputStream。擴展其中一個類;你不能從兩個類繼承(Stream類是抽象的)。

然後,以調用適當的InputStreamOutputStream方法的方式編寫InputOutputStream的每種方法。

public InputOutputStream() { 
    InputStream is = new BufferedInputStream(source); 
    OutputStream os = new BufferedOutputStream(source); 
} 
//.... 
public int read() { return is.read(); } 
public void write (int x) { os.write(x); } 
//....more methods.... 
// (if you extend an abstract class, you must override EVERY 
// abstract method in the class...) 

如果需要,你可以使用一個包裝了InputOutputStream四周,擴展了其他Stream類,通過所有方法調用了一個潛在的InputOutputStream適配器類。

然而,它可能更容易,只需使用原始InputStream S和OutputStreams,不過,只要傳遞需要一個到任何方法或代碼使用它....

希望這有助於反正。

+0

感謝您的回覆。 – maverik

相關問題