コンパイルは通っています。
Exceptionが派生しているのは
while((size = in.read(data, offset, data.length)) != -1) {
の部分です。
そもそもHTTPでoffsetを設定したreadをしていいのかが気になっています。

もしかしてJavaヒープとスクラッチパッドって同じメモリ領域を共有しているのですか?
とりあえずJavaヒープに収まる
byte[] data = new byte[20480];
で分割しながらスクラッチパッドに書き込もうと思っていたのですが…。