トップ «前の日記(2009-10-17) 最新 次の日記(2009-10-19)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2009-10-18

_ HttpURLConnectionではまる

JDK1.5以降で、URLConnectionにsetConnectTimeoutが実装されたので、おれさまHTTPクライアントを作る必要がなくなったと考えた。

たまたま、text/xmlで文字コードがWindows-31Jのデータを読み込む必要があったので、次のような(実際にはもっと複雑)プログラムを作った。

import java.io.*;
import java.net.*;
public class XmlReader {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://www.artonx.org/data/win31j.xml");
        HttpURLConnection c = (HttpURLConnection)url.openConnection();
        c.setConnectTimeout(1000);
        c.setReadTimeout(3000);
        c.connect();
        if (c.getResponseCode() == HttpURLConnection.HTTP_OK) {
            ByteArrayOutputStream bao = new ByteArrayOutputStream();
            byte[] buff = new byte[4000];
            int n;
            InputStream is = c.getInputStream();
            while ((n = is.read(buff)) >= 0) {
                if (n > 0) {
                    bao.write(buff, 0, n);
                }
            }
            is.close();
            String s = new String(bao.toByteArray(), "windows-31j");
            System.out.println(s);
        }
        c.disconnect();
    }
}

む、期待した通りに動かない。つまりまっとうに動作する。

c:?test>java XmlReader
<?xml version="1.0" encoding="windows-31j"?>
<data>日本語のデータ</data>

Solaris版だと??になって、結局、サーバでtext/xml; charset=windows-31jを返すようにしたのだが、変だな。そこまでJDKの実装が異なるとは思えないし(何かSolaris版の最初の実装にはバグがあったのかな)、なんでうまく動くんだろう。

_ 続き

という時に、既定の実装がすぐに見えないのは不便だな。というか、こういう時にすぐデカフェできるのが、IDEの長所か。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|

ジェズイットを見習え