这两种流的输出有什么区别

    String content;
    int n;
    StringBuilder sb = new StringBuilder();
    while ((n = input.read()) != -1) {
        sb.append((char) n);
    }
    content = sb.toString();
    return content;

 

    ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = -1;

    while ((len = inputStream.read(buffer)) != -1) {
        outSteam.write(buffer, 0, len);
    }
    outSteam.close();
    inputStream.close();

    return outSteam.toByteArray();

这两种不同的方式有什么优缺点,为什么这样用,求求解

操作流用stream,操作字符串用 StringBuilder.  

while ((n = input.read()) != -1) {
        sb.append((char) n);
    }

这样一个字符一个字符的来读流中的数据很慢。