Я использую оба следующих, но не работающих для огромных данных. 12 МБ
char[] chars = new char[1024];
int len;
while((len=buffer.read(chars))>0) {
data.append(chars,0,len);
}
и
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}