09/08/10 13:25:51
ちゃんと読まなかった結果がこれだよ…
391:デフォルトの名無しさん
09/08/10 13:29:58
>>384
もしかして "SJIS" じゃなくて "Windows-31j" とか "MS932" を指定すると上手く動いたりしないだろうか
392:デフォルトの名無しさん
09/08/10 13:31:17
>>388
null と "" は別のものなので、2個チェックする必要があります
393:382
09/08/10 13:33:58
>>385
わかりました、ありがとうございます
394:デフォルトの名無しさん
09/08/10 13:43:53
>>384
"Windows-31j" と"MS932"は、試してみましたがだめでした。
2chのスレッド内容を取得しようと思ったんですけど、httpHeaderに設定されている「content-length」の値と
SJIS→UTF8→SJISファイル出力で取得したbyte長が異なるので困ってます。
うーんいい方法はないのかなぁ。
395:デフォルトの名無しさん
09/08/10 13:53:40
>>394
改行コードの問題とかはない?
readLineは\nでも\rでも\r\nでも改行扱いするはずだけど、出力してる改行コードが元と違うとか
具体的に何がどう変わってるのか、バイナリダンプかなんかで比較して調べるべきかと
396:デフォルトの名無しさん
09/08/10 14:19:09
>>387
>一行読込とかやりたかったんだけど
URLリンク(commons.apache.org)
こういうのがありますが、使えませんか?
397:デフォルトの名無しさん
09/08/10 14:27:35
>>394
やりたいこととやってることが微妙に合っていないように聞こえるが。
2chのhtmlが文字列だからといって、Reader/Writerを使わなければならない訳じゃない。
そもそもContentLengthはhttpのボディ部が”バイナリとして”何バイトあるかを示しているはずだ。
だからReader/Writerじゃなく、InputReader/Writerでバイナリのままファイルに落とせ。
398:397
09/08/10 14:29:48
>>397
ごめ、イキオイで間違った。
>inputRaeader/Writer
じゃなくて
InputStream/OutputStream
399:デフォルトの名無しさん
09/08/10 14:45:36
>>396
ディレクトリ操作とか便利そうですが、今回のファイル入出力に関してはちょっと用途が違うなと思いました。
>>397,398
やっぱしstreamでI/Oするのがスマートそうですね。
ちょっと実装してみます。
400:デフォルトの名無しさん
09/08/10 14:46:08
>>394
>「content-length」の値と
>SJIS→UTF8→SJISファイル出力で取得したbyte長が異なるので困ってます。
content-lengthの事を書いているのを見ると、差分データを取りに行きたいんでしょ?
スレッド番号.infoみたいなのを作ってレスポンスヘッダからconect-lengthの値を取得して、
<content-length>数値</content-length>とかやった方がいいと思うんだけど。
401:デフォルトの名無しさん
09/08/10 14:46:16
>>394
改行コードは問題ありませんでした。LFなので特に困ってないです。
402:デフォルトの名無しさん
09/08/10 14:49:46
>>400
ご名答。
ずばり2chスレッドの差分データを取得するために、content-lengthの値を設定したいのですが、思った通りに値を設定できなくて四苦八苦してます。
ちょっと悩んでみます。
403:デフォルトの名無しさん
09/08/10 14:51:37
うるさい
404:デフォルトの名無しさん
09/08/10 14:52:42
むしろHTTPなら java.net.HttpURLConnection とか import java.net.URL でまかなえるのでは
405:デフォルトの名無しさん
09/08/10 15:01:25
>>402
自分で全体から一部を取り出さなくても、”新着レスの表示”リンクを見れば
URLにちょっと書くだけで差分が送られてくることが分かるだろ
全体を得たとしても、htmlを良く見ればレスがdat落ちと似た形式で一行毎になっているのが確認できるはずだ。
その部分を抜き出せば、レスの件数=行数。差分も得やすくなるだろ。
406:デフォルトの名無しさん
09/08/10 15:02:19
受信した生データはいったんそのままStreamでファイルに保存しておいて、
あらためてファイルからReaderで1行ずつ読み込めばいい
407:デフォルトの名無しさん
09/08/10 15:23:52
>>402
>>404 にも書いてある通りHttpURLConnection 使った方がいいと思うな
URLリンク(www.fk.urban.ne.jp)
てか、content-lengthを取得できないっってことはe-tagも取得できていないでしょ?
サーバに必要なデータを送らないと、ちゃんとデータを送り返してくれないような気がする
差分データはステータスコードを気にしながらコードを書かないいけないので注意
408:デフォルトの名無しさん
09/08/10 15:28:35
>>405
それがdatファイルの扱いに関しては簡単ではないんです。
>>406,407
初回は、HttpURLConnectionで取得しているのですが2回目以降は、最初に取得した情報をファイルに出力しておいて
ファイルの差分をHttpURLConnectionで問い合わせようとしています。
そこで、content-lengthが重要になってくるんです。
javaじゃなければ簡単に処理できんだけど、なんでUTF8以外を扱おうとするとおかしくなるんだろ。
409:デフォルトの名無しさん
09/08/10 15:32:26
>>392 ありがとうございました。
410:デフォルトの名無しさん
09/08/10 15:48:57
>>408
とりあえず、初回読込はネットから取得してSJISファイル保存。
2回目以降のアクセスは、さきほどのファイルからbyteを取得して、ネットから差分取得でうまくいきました。
ありがとうございます。