4

这个问题(在某种程度上)与这个问题有关。

基本上,我想做一个函数,如下所示:

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

出现几个问题:

  • 我在任何地方都找不到像InputOutputStream. 它只是InputStreamandOutputStream及其变体(如InputDataStream,OutputDataStream等)。有吗?我需要一个支持读写操作的流。
  • 我怎样才能InputOutputStream从文件中创建一个?
  • 我怎样才能InputOutputStream从字符串?

因为 C++InputOutputStream是一个std::iostream. 我可以毫无问题地转换std::fstream或转换它。std::stringstream它在Java中可以访问吗?

谢谢。

4

2 回答 2

3

您可以考虑改用 RandomAccessFile。

于 2013-02-05T22:54:33.277 回答
1

Java中没有InputOutputStream。如果您想 DIY,请按照以下说明进行操作。如果您扩展abstract class,请使用Javadoc确保覆盖每个 abstract方法;没有那么多。

创建一个使用两个流 anInputStream和 an 的类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.

However, it's probably easier to just use raw InputStreams and OutputStreams, though, and just pass the needed one to whatever method or code uses it....

Hope this helped, anyway.

于 2013-02-05T23:05:59.730 回答