ls -al

仮想通貨やプログラミングに関する事などをつらつらと書き綴ります

Kotlin(Java)でURLによって指定したコンテンツをバイナリとしてダウンロードする

Androidアプリを作っている際に必要になったので調査してやってみました。内容的にはJavaも殆ど同じように出来るのでタグに入れてあります。個人的なメモ。


コード

 「文字列で表現されたURLを受け取って、GETメソッドでリクエストを送信し、ダウンロードしてバイナリを返す」という動作をする関数として実装すると以下のようになります。

fun getBinaryFromURL(url: String)
    var inputStream : InputStream? = null
    val url = URL(url)
    val con = url.openConnection() as HttpURLConnection

    con.setRequestProperty("Content-Type", "application/octet-stream")
    con.requestMethod = "GET"

    con.connect()

    if (con.responseCode === HttpURLConnection.HTTP_OK) {
        inputStream = con.inputStream
    }

    inputStream?.let {
        val buffer = ByteArray(1024 * 1024 * 20)
        val bOut = ByteArrayOutputStream()
        while (true) {
            val len = it.read(buffer)
            if (len < 0) {
                break
            }
            bOut.write(buffer, 0, len)
        }
        return bOut.toByteArray()
    }
    return null
}

Androidで使用する際はAsyncTaskなどを利用して非同期に実行してください。