将输入流读取到缓冲区的最佳方法

use*_*553 5 java io file-io

要将任何输入流读取到缓冲区,有两种方法。有人可以帮助我了解哪种方法更好以及为什么?每种方法应该在什么情况下使用?

  • 逐行读取并将其附加到缓冲区。

例如:

public String fileToBuffer(InputStream is, StringBuffer strBuffer) throws IOException{
    StringBuffer buffer = strBuffer;
    InputStreamReader isr = null;

    try {
        isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line = null;

        while ((line = br.readLine()) != null) {
            buffer.append(line + "\n");
        }
    } finally {
        if (is != null) {
            is.close();
        }
        if (isr != null) {
            isr.close();
        }
    }

    return buffer.toString();
}
Run Code Online (Sandbox Code Playgroud)
  • 读取最大缓冲区大小,即 char 数组中的 1024 字节。

例如:

InputStreamReader isr = new InputStreamReader(is);
final int bufferSize = 1024;
char[] buffer = new char[bufferSize];
StringBuffer strBuffer = new StringBuffer();

/* read the base script into string buffer */
try {
    while (true) {
        int read = isr.read(buffer, 0, bufferSize);
        if (read == -1) {
           break;
        }

        strBuffer.append(buffer, 0, read);
     }
} catch (IOException e) {
}
Run Code Online (Sandbox Code Playgroud)

Evg*_*eev 3

考虑

public String fileToBuffer(InputStream is, StringBuffer strBuffer) throws IOException {
    StringBuilder sb = new StringBuilder(strBuffer);
    try (BufferedReader rdr = new BufferedReader(new InputStreamReader(is))) { 
        for (int c; (c = rdr.read()) != -1;) {
            sb.append((char) c);

        }
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

  • 您提供单字节缓冲区版本作为*改进*? (4认同)