通信について質問です。(3Gで試しています)

HttpConnection conn = (HttpConnection)Connector.open(url);
conn.setRequestMethod(HttpConnection.GET);
InputStream is = conn.openInputStream();
int length = (int)conn.getLength(); //lengthが大きい場合

byte[] b = new byte[length];
is.read(b);

このように通信すると、getLength()で取れた値が大きい場合(例えば20K)
通信でエラーはでないのですが、
実際のバイト値を表示してみると、1K位までしか取得できていなく、
それ以降は、すべて0で埋まっています。

でも、、
byte[] buf = new byte[1024];
baos = new ByteArrayOutputStream();
int len = 0;
while((len = is.read(buf)) != -1){
 baos.write(buf, 0, len);
}
このような感じで1Kづつ読み込むと全部取得できました。

InputStreamから一気に読み取ってはダメなのでしょうか?