1

メソッドでは、DataInputStreamをパラメーターとしてラップするBufferedReaderが必要です。メソッドを次のように宣言したい:

public void firstPass(BufferedReader inStream){ // some code ... }

しかし、inStreamがDataInputStreamをラップしているかどうかを確認する方法がわかりません。

私はもう試した

public static void firstPass(BufferedReader inStream){
    if (inStream instanceof DataInputStream){

    }       
}

ただし、コードをコンパイルできません(Eclispeはコードを受け入れません:「互換性のない条件付きオペランドタイプBufferedReaderおよびDataInputStream」)。


なぜこれが必要なのですか?同じ変数inStreamで使用したいので:

  • BufferedReaderのメソッドreadLine()
  • DataInputStreamのメソッドreadDouble()

したがって、両方のクラスをチェーンするストリームが必要です。

私はJava7JDKでプログラミングしています。

誰かが私を助けてくれませんか?前もって感謝します。

4

5 に答える 5

2

DataInputStreamをBufferedReaderのインスタンスにすることはできません。どちらも、別々のクラス階層にあります。

BufferedReaderは、Streamではなく別のReaderをラップします。

InputStreamReaderを使用して、ストリームからリーダーにブリッジできます。

同じリーダーからdoubleとlineを読み取ることは、実際には意味がありません。1つは生のバイナリデータで、もう1つは文字データです。たぶん、doubleのテキストエンコーディングを読み取り、を使用してこれを解析する必要がありますDouble.parseDouble(text)

于 2012-07-05T20:06:12.020 に答える
1

A. bufferedReader引数を受け入れるフラグをメソッドに追加することで、達成しようとしていることを達成することはできません。

B. DataInputStreamをBufferedReaderに渡す方法が明確ではありません(おそらくInputStreamReaderを介して)。しかし、いずれにせよ、BufferedReaderとDataInputStreamを一緒に使用しているのは間違っているようです。BufferedReaderはDataInputStreamをプレーンなInputStreamのように使用するため、DataInputStreamをその周りに配置した理由がわかりません。

于 2012-07-05T20:06:37.523 に答える
1

DataInputStreamクラスは、BufferedReaderクラスのサブタイプではありません

class DataInputStream extends FilterInputStream implements DataInput {}

class BufferedReader extends Reader {}

より詳しい情報:

于 2012-07-05T20:14:01.813 に答える
0

BufferedReaderはのサブクラスではないDataInputStreamため、エラーは論理的です...

于 2012-07-05T20:09:21.037 に答える
0

BufferedReadersはテキストデータ用で、DataInputStreamはバイナリデータ用です。人々を混乱させるのが好きでない限り、一方を他方で包むことは決してありません。

DataInputStreamを使用してBufferedInputStreamをラップできます(他の方法でラップしても意味がありません)

BufferedReaderをInputStreamReaderの周りにラップすることはできますが、これが行われたことを確認する簡単な方法はありません。

あなたは書くことができます

BufferedReader br = new BufferedReader(new FileReader(name));

ただし、BufferedReaderが何をラップするかを決定するには、リフレクションライブラリを使用する必要があります。

于 2012-07-05T20:09:28.690 に答える