どうも、renieseです。
仕事でInputStreamについて扱っていて困った事があったので、備忘録として残します。
※2013/10/26(同日)
ちょっと嘘書いてましたね・・・。調査不足だった。追記・修正しました
事象はテキストファイル内に空行がある場合は、その行を無視するようにするというもの。
ん?readLine使えば簡単じゃないのかって?それが、現場のシステムはBufferedReader使ってなくて、
InputStreamを直に扱っているのですよ・・・バイナリじゃなくてテキストファイルなんだけどな。
で、最初はInputStream⇒InputStreamReader⇒BufferedReaderと通して、判断するつもりで作業。
ただ、あくまでも「ファイルの流れ」を追っている為、その流れは連動しています。
BufferedReaderでreadLine使うと一気に行の最後までファイルの読み込み位置が移動し、
InputStream側で読み込む場合はそこからになると言う事。
(この自分の記載ってJavaを扱っていないと分かりづらいですよね・・・まぁ、いいや)
※
これ、間違えてました。
BufferedReaderで読み込んだ後にInputStream側のメソッドだと-1が返ってきた。
1度でもBuffredReaderで読み込むと、その後はInputStreamは使えないと言う事か?
まぁ、確かに使う意味もないし・・・。調査不足でした。
その為、先にmarkで位置を覚えておいて、readLineで処理を進めた場合はresetで戻す必要がある。
どちらにせよBufferedReaderで出来るので問題は無い。これがまずその1。
次に困った・・・と言うか、時間的に昨日はここで終わったのだが、あまりソースに手を加えたくないので、
判断後にBufferedReaderとInputStreamReaderはcloseしたのだが、その後にInputStreamでreadしたら
-1(ファイルの終端)が返ってきてしまった。調査する時間が無かったのでさっき家でやりました。
やっぱり閉じるとダメなようね・・・。って事はこのままBufferedReaderを使わないとダメそうだ。
BufferedReader使用中でもInputStreamの方のメソッドは使えるようなのでソース的には問題ないかな。
まぁ、修正するとしても大した修正では無いだろ・・・多分。これが2つ目。
最後の3つ目は家で調査中に思った事なんだが、InputStream⇒InputStreamReader⇒BufferedReader
ではなく、InputStream⇒BufferedInputStream⇒InputStreamReader⇒BufferedReader
としたらパフォーマンスどうなの?と。1行あたり1000文字で10,000行のテキストデータを読んでみたら
前者の方が少し早かったです。バッファを2つ通しても意味がないと言う事か。
それとも状況によるのかな??ググっても出てこなかったなぁ。
ではでは。
仕事でInputStreamについて扱っていて困った事があったので、備忘録として残します。
※2013/10/26(同日)
ちょっと嘘書いてましたね・・・。調査不足だった。追記・修正しました
事象はテキストファイル内に空行がある場合は、その行を無視するようにするというもの。
ん?readLine使えば簡単じゃないのかって?それが、現場のシステムはBufferedReader使ってなくて、
InputStreamを直に扱っているのですよ・・・バイナリじゃなくてテキストファイルなんだけどな。
で、最初はInputStream⇒InputStreamReader⇒BufferedReaderと通して、判断するつもりで作業。
ただ、あくまでも「ファイルの流れ」を追っている為、その流れは連動しています。
BufferedReaderでreadLine使うと一気に行の最後までファイルの読み込み位置が移動し、
※
これ、間違えてました。
BufferedReaderで読み込んだ後にInputStream側のメソッドだと-1が返ってきた。
1度でもBuffredReaderで読み込むと、その後はInputStreamは使えないと言う事か?
まぁ、確かに使う意味もないし・・・。調査不足でした。
その為、先にmarkで位置を覚えておいて、readLineで処理を進めた場合はresetで戻す必要がある。
どちらにせよBufferedReaderで出来るので問題は無い。これがまずその1。
次に困った・・・と言うか、時間的に昨日はここで終わったのだが、あまりソースに手を加えたくないので、
判断後にBufferedReaderとInputStreamReaderはcloseしたのだが、その後にInputStreamでreadしたら
-1(ファイルの終端)が返ってきてしまった。調査する時間が無かったのでさっき家でやりました。
やっぱり閉じるとダメなようね・・・。って事はこのままBufferedReaderを使わないとダメそうだ。
BufferedReader使用中でもInputStreamの方のメソッドは使えるようなのでソース的には問題ないかな。
まぁ、修正するとしても大した修正では無いだろ・・・多分。これが2つ目。
最後の3つ目は家で調査中に思った事なんだが、InputStream⇒InputStreamReader⇒BufferedReader
ではなく、InputStream⇒BufferedInputStream⇒InputStreamReader⇒BufferedReader
としたらパフォーマンスどうなの?と。1行あたり1000文字で10,000行のテキストデータを読んでみたら
前者の方が少し早かったです。バッファを2つ通しても意味がないと言う事か。
それとも状況によるのかな??ググっても出てこなかったなぁ。
ではでは。