为什么我们在从服务器获取响应时需要使用 BufferedReader 而不是 String

Why we need to use BufferedReader instead of String while getting the response from server

我正在做一个 android 应用程序,它从服务器获取一些 JSON 值。所以我做了一些研究并开发了从服务器获取数据到我的应用程序的代码。

我只是使用下面的代码。

    HttpResponse response;
    Object content = null;
    HttpGet httpget = new HttpGet(url);
    response = client.execute(targetHost, httpget,localContext);
    HttpEntity entity = response.getEntity();
    content = EntityUtils.toString(entity);   
    Log.d("content", "OK: " + content.toString());

当我查看一些教程时,他们使用 BufferedReader 进行与此相同的操作。

     HttpResponse httpResponse = httpClient.execute(httpPost);
     InputStream inputStream = httpResponse.getEntity().getContent();
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
     BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
     StringBuilder stringBuilder = new StringBuilder();
     String bufferedStrChunk = null;
     while((bufferedStrChunk = bufferedReader.readLine()) != null){
                        stringBuilder.append(bufferedStrChunk);
                    }
     Log.d("content", "OK: " + stringBuilder.toString());

所以我的问题是:

  1. 为什么要使用 BufferedReader 方法?使用这个有什么好处吗?

  2. 到目前为止第一种方法对我来说还不错,以后会不会因为第一种方法出现错误或麻烦?

    谢谢 :).

Why using the BufferedReader method? Is there any advantage for using this?

java.io.BufferedReader class 从字符输入流中读取文本,缓冲字符以便有效地读取字符、数组和行。

缓冲可以加快 IO 相当大的速度。您不是一次从网络或磁盘读取一个字符,而是一次读取一个更大的块。

there any chance errors or trouble because of the first method in future?

不,直接在代码中做不会有任何错误。但它会稍微降低你的性能(可能以毫秒为单位),另一件事是,如果你不使用 BufferedReader 然后来自服务器的大小流将不知道。

The BufferedReader class provides buffering to your Reader's. Buffering can speed up IO quite a bit. Rather than read one character at a time from the network or disk, you read a larger block at a time. This is typically much faster, especially for disk access and larger data amounts.

The main difference between BufferedReader and BufferedInputStream is that Reader's work on characters (text), wheres InputStream's works on raw bytes.

这里有很好的解释:Java IO: BufferedReader

StringBufferclass用于需要对字符串进行大量修改的时候

与字符串不同,StringBuffer 类型的对象可以反复修改,而不会留下很多新的未使用的对象。

这一行的类比:

StringBuffer 追加与添加两个 String 对象一样快

stringBuilder.append(bufferedStrChunk); - //This will fast in cpu execution
String str;
str = str + "some string" // This will slow  in cpu execution