1

私は自分に文字列を送信しようとしますInputStream:

String _source = "123";
InputStream in = new ByteArrayInputStream(_source.getBytes("UTF-8"));
tempLab2.readR(in);
            
String _source2 = "321";
in.read(_source2.getBytes());
_myClass.readR(in);

new を作成して引数としてByteArrayInputStream設定_sourceすると、すべてがうまく機能します。\n私のメソッド readR は、EOF文字と読み取りを待機しません123

R: を入力してください

R:123

readR方法:

public void readR(InputStream inpSteram) {
    Scanner tScanner = new Scanner(inpSteram);
    System.out.println("Please enter R:");
    _R = tScanner.nextDouble();
    System.out.println("R: " + _R);
}

しかし、私がそうして送信_source2した場合in.read(_source2.getBytes())、私Scannerは待っていて、私だけが見えます

R: を入力してください

何か案は?

4

4 に答える 4

5

この線

in.read(_source2.getBytes());

入力ストリームに新しい情報を追加するのではなく、さらにデータがある場合は空にします。したがって、入力ストリームが使い果たされます。

次の readR の呼び出しの前に、新しい入力ストリームを作成するだけです。そう:

String _source2 = "321";
in = new ByteArrayInputStream(_source2.getBytes("UTF-8"));
_myClass.readR(in);
于 2013-10-26T12:31:51.397 に答える
2

あなたのコードは意味がありません:

String _source2 = "321";
in.read(_source2.getBytes());

in.read()からバイトをin読み取り、読み取った内容を引数として渡されたバイト配列に格納します。したがって、基本的に、上記のコードは 3 バイト長の配列を作成し、3 バイトで埋めてから、入力ストリームからバイトを読み取ろうとし、3 バイト長のバイト配列を結果で埋めます。

于 2013-10-26T12:30:58.523 に答える
0

文字の操作に InputStream を使用しないでください。Reader を使用してください。

また、2番目の例では、自分がしていると思っていることをしていません。_source2入力ストリームにバイトを追加していません。代わりに、現在空になっている元の InputStream から元のバイトを再利用しようとしています。

于 2013-10-26T12:31:11.200 に答える