4

この質問は、(何らかの形で) this oneに関連しています。

基本的に、次のような関数を作成したいと思います。

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

いくつかの疑問が生じます:

  • のようなクラスがどこにも見つかりませんInputOutputStreamInputStreamおよびOutputStreamそのバリエーション ( InputDataStreamOutputDataStreamなど)のみです。ありますか?読み取り操作と書き込み操作の両方をサポートするストリームが必要です。
  • InputOutputStreamfrom ファイルを作成するにはどうすればよいですか?
  • from 文字列を作成するにはどうすればよいInputOutputStreamですか?

C++InputOutputStreamの場合はstd::iostream. そして、問題なく変換できstd::fstreamます。std::stringstreamJavaで到達可能ですか?

ありがとう。

4

2 に答える 2

3

代わりに RandomAccessFile の使用を検討できます。

于 2013-02-05T22:54:33.277 に答える
1

InputOutputStreamJavaにはありません。DIYしたい場合は、以下の手順に従ってください。を拡張する場合は、 Javadocabstract classを使用してすべてのメソッドをオーバーライドするようにしてください。それほど多くはありません。 abstract

InputStreamと の2 つのストリームを使用するクラスを作成しますOutputStream。クラスの 1 つを拡張します。両方のクラスから継承することはできません (Streamクラスは抽象です)。

次に、適切なorメソッドInputOutputStreamを呼び出す方法で、各メソッドを記述します。InputStreamOutputStream

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が、必要なものを、それを使用するメソッドまたはコードに渡すだけです....

とにかく、これが役に立てば幸いです。

于 2013-02-05T23:05:59.730 に答える