Java 从BufferedReader获取字符串的更好方法是什么

Java 从BufferedReader获取字符串的更好方法是什么,java,android,Java,Android,我从下面的网络代码中获得了BufferedReader URL url = new URL(request); HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection(); InputStream inputStream = httpUrlConnection.getInputStream(); bufferedReader = new BufferedReader(n

我从下面的网络代码中获得了
BufferedReader

    URL url = new URL(request);
    HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection();
    InputStream inputStream = httpUrlConnection.getInputStream();
    bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  • 我想知道,在执行速度方面,哪种方式可以提高效率
  • 1024码是Android的好选择吗?或者,我可以使用任何系统常量值吗

        int charRead = 0;
        char[] buffer = new char[1024];
        StringBuffer stringBuffer = new StringBuffer();
        while ((charRead = bufferedReader.read(buffer)) > 0) {
            stringBuffer.append(buffer, 0, charRead);
        }
    


  • 可能设置更高的缓冲限制将是最好的选择

    根据java文档

    可以指定缓冲区大小,也可以使用默认大小。对于大多数情况,默认值足够大

    缓冲是更好的方法。再次按照文件

    如果没有缓冲,每次调用read()或readLine()都可能导致从文件中读取字节,将其转换为字符,然后返回,这可能非常低效


    我认为第一种方法更有效,但我宁愿设置更高的缓冲区大小,例如8*1024。这是HttpClient中的默认CoreConnectionPNames.SOCKET\u BUFFER\u大小。 我更愿意说低于8*1024是不合理的,因为大多数HTTP缓冲区都设置为8*1024

    在第二种方法中,假设流中有新行字符。如果20MB json以没有新行字符的方式进行优化,该怎么办?这会毁了你的应用程序

    一行被认为是由换行符('\n')、回车符('\r')或紧接着换行符的回车符中的任意一个终止的


    在我看来,最好的选择是使用8*1024的乘法。上限约束与内存大小和连接速度以及流的缓冲区处理时间有关。

    使用
    StringBuilder
    被认为是
    StringBuffer
    的更好选择,除非您需要使用同步
    StringBuffer
    的开销。(
    StringBuilder
    是一个替代品)


    至于性能,我将使用第一种方法,并避免使用
    readLine()
    ,除非您需要将该行作为文本行处理。另外,
    readLine()
    不会返回实际的换行符,因此在第二个示例中创建的数据将丢失换行符,因此可能与从服务器传输的数据不完全相同。

    但问题是,如果我没有指定大小,我将如何构造字符数组?感谢StringBuilder提示。我差点忘了。
            String line = "";
            StringBuffer stringBuffer = new StringBuffer();
            while ((line = bufferedReader.readLine()) != null) {
                stringBuffer.append(line);
            }