Java:InputStream和OutputStream的常见接口

4
这个问题与这个问题有些相关,涉及到IT技术。 基本上,我想要创建一个像这样的函数:
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++,InputOutputStream是一个std::iostream。我可以毫不费力地将std::fstreamstd::stringstream转换为它。在Java中可行吗?

谢谢。


1
请查看:http://ostermiller.org/convert_java_outputstream_inputstream.html,但我认为这比根据条件使用所需内容更费力。 - Jane Doh
1
如果你想从文件中读取和写入数据,可以使用 RandomAccessFile,或者打开一个 InputStream,读取后关闭,然后再打开一个 OutputStream,写入数据并关闭。 - Louis Wasserman
2个回答

3
您可以考虑使用RandomAccessFile替代。

我无法强迫自己像Java程序员那样思考。C++仍然占据着我的大脑。也许这可以帮助到我。谢谢。 - maverik
1
这是一个很少使用的类。我更倾向于实际审查需求。 - user207421

1
在Java中没有InputOutputStream。如果您想自己动手,按照以下说明操作。如果您扩展了一个抽象类,请使用Javadoc确保您覆盖了每个抽象方法;这不是很多。
创建一个使用两个流(InputStream和OutputStream)的类。扩展其中一个类;您不能同时继承两个类(Stream类是抽象的)。
然后,编写您的InputOutputStream的每个方法,以调用适当的InputStream或OutputStream方法。
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然而,可能更容易只使用原始的InputStreamOutputStreams,并将所需的一个传递给使用它的任何方法或代码....
希望这能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接