2013-02-05 62 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

相关问题