>>499
ちゃんとInputStream#readの戻り値を見てみては?
こう。
int offset = 0;
while (length > 0) {
 int got = is.read(buf, offset, length);
 length -= got;
 offset += got;
}
20Kはダメだけど1Kなら一度で確実に読めるに違いない、
っていうのは気持ち悪いでそ。