【问题标题】:Why we need to use BufferedReader instead of String while getting the response from server为什么我们在从服务器获取响应时需要使用 BufferedReader 而不是 String
【发布时间】:2015-04-28 17:58:36
【问题描述】:

我正在做一个 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. 到目前为止,第一种方法对我来说效果很好,将来是否会因为第一种方法而出现任何错误或麻烦?

    谢谢:)。

【问题讨论】:

  • @Neil 感谢您提供链接,但这不是我问题的答案。无论如何谢谢。
  • 是的。像那个链接的答案那样做会更干净,只是一个提示。

标签: java android httpclient bufferedreader


【解决方案1】:

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

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

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

以后会不会因为第一种方法出现错误或麻烦?

不,如果您直接在代码中执行此操作,则不会出现任何错误。但这会稍微降低您的性能(可能以毫秒为单位),另一件事是,如果您不使用BufferedReader,那么来自服务器的大小流将是未知的。

【讨论】:

  • 很棒的信息老兄,谢谢。 +1。
  • @RemeesMSyde 如果对您有帮助,您可以接受答案
  • 当然,伙计,我正在等待更多的意见,如果你是最好的,我一定会的。
【解决方案2】:

BufferedReader 类为您的 Reader 提供缓冲。 缓冲可以大大加快 IO。而不是读一个字符 一次从网络或磁盘读取一个更大的块。 这通常要快得多,尤其是对于磁盘访问和更大的 数据量。

BufferedReader 和 BufferedInputStream 的主要区别是 Reader 在字符(文本)上的工作,而 InputStream 在哪里工作 原始字节。

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

StringBuffer 类在需要对字符串进行大量修改时使用。

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

这一行的类比:

StringBuffer append 与添加两个 String 对象的速度一样快

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

【讨论】:

  • 我认为您将 BufferedReader 与 StringBuffer 混淆(通常应该用 StringBuilder 替换)
  • @Lavekush Agrawal,感谢您提供信息,伙计 +1。
  • @Pablo 感谢提醒我已经相应地更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2018-03-08
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多