- ベストアンサー
InputStreamにたまったデータを消す方法
InputStreamにたまったデータを消す方法 私は現在勉強のためにsocketプログラミングをJavaでしているのですが困った事があります。それはInputStreamからreadでデータを読み込んでも、読み込んだデータはStream内に消えずに残っているため、処理が複雑になってしまいます。何かflushのようなstreamにたまったデータを吐き出すメソッドはないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1の者です。 > inStream.read(readByte, 0, 100); read()の返り値をチェックしていないのが気になります。 おそらくですが、2回目のread()では1バイトも読み込んでいないのでreadByte[]の内容が変わっていないのではないでしょうか。 ↓このようにしたらどうなりますか? n = inStream.read(readByte, 0, readByte.length); System.out.println("n = " + n); for(int i = 0;i < n;i++) { System.out.println("readByte" + i + " = " + readByte[i]); }
その他の回答 (1)
- salsberry
- ベストアンサー率69% (495/711)
> InputStreamからreadでデータを読み込んでも、読み込んだデータはStream内に消えずに残っているため 普通はそんな現象は起きないので流れてきたデータを順番にreadするだけですが、どういうプログラムでそういうことが発生しているのか示すことはできますか? なお、読み飛ばしたいバイト数が分かっているならばInputStream.skip()メソッドを使うこともできます。
補足
お返事ありがとうございます。 簡単にプログラムを書かせていただきますと、 --------Server-------- OutputStream outStream; byte[] writeDataByte =new byte[6];//送るデータをbyteに変換した物 outStream.write(wirteDataByte); outStream.write(wirteDataByte); --------Server-------- --------Client-------- InputStream inStream;//markはsupportしていない byte[] readByte = new byte[100]; System.out.println("available = " + inStream.available());//結果は12 inStream.read(readByte, 0, 100); for(int i = 0;i < 100;i++) { System.out.println("readByte" + i + " = " + readByte[i]); } System.out.println("available = " + inStream.available());//結果は0 inStream.read(readByte, 0, 100); for(int i = 0;i < 100;i++) { System.out.println("readByte" + i + " = " + readByte[i]); } --------Client-------- このようなソースを動かすと、一回目の出力と二回目の出力が同じ内容になります。また私もavailableでデータの長さを読み取り、skipで後ろから送ったデータの分だけをとろうともしたのですが、二回目のavailableでは長さが0になっているため、うまくいきません。 お手数をお掛け致しますが、お返事よろしくお願いいたします。
お礼
なんどもお返事ありがとうございます。 言われたとおりにやってみると二回目はー1を吐いていました。 なので前のデータを表示させていただけだったんですか・・・。 初歩的なミスではずかしいです。しかしおかげさまで問題は解決できました。付き合っていただきありがとうございます。