java - 尝试了解 Android 中的 XML Pull 解析器 - Java

标签 java android xml

我正在学习使用 XML 读取 RSS 提要的教程。请知道,我是一个非常视觉化的学习者,教学人员试图用语言解释它,但遗憾的是我不明白:(。所以我希望有人可以解释。

 StringBuilder tempBuffer = new StringBuilder();

        try{
            URL xmlUrl = new URL(URLPath);
            HttpURLConnection httpURLConnection = (HttpURLConnection) xmlUrl.openConnection();
            int response = httpURLConnection.getResponseCode();
            Log.d("Downloaded Data", " Response Code:" + response);

            InputStream is = httpURLConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);

            int charRead;
            char[] buffer = new char[500];

            while(true){

                charRead = isr.read(buffer);

                if(charRead <= 0){
                    break;
                }


                tempBuffer.append(String.copyValueOf(buffer, 0, charRead));

            }
            return tempBuffer.toString();

现在我想尝试理解的是 char[] buffer = new char[500]。当我们执行 charRead = isr.read(buffer) 来读取流时,这意味着什么?

最佳答案

我将尝试以视觉示例的形式对其进行解释。

InputStream想象为从墙上的洞(网络)中出来的传送带。传送带上有一系列char,但是你需要将它们带到你面前,然后才能将它们从传送带上取下并处理到你的桶(buffer,只能容纳500 char)中。当您调用 isr.read(buffer) 时,传送带运算符(operator)被告知启动传送带。传送带将开始滚动,将 char 对象倒入桶 (buffer) 中。这将持续到

A.传送带将 500 chars 转储到桶(缓冲区)中,或

B.传送带耗尽了从墙上(网络)的孔中出来的

代码行:

if(charRead <= 0){
    break;
}

告诉传送带,如果按下按钮时墙上的孔中没有任何东西出来,则停止按下按钮并退出循环。

代码行:

tempBuffer.append(String.copyValueOf(buffer, 0, charRead));

告诉传送带运算符(operator)停止正在做的事情(在传送带因 500 个字符被倾倒到桶中或传送带用完字符而停止移动之后)并取出桶中的所有内容(缓冲区),并取出 charRead 数量的字符。基本上,这就是桶中的所有内容,因为我们知道 charRead 是从传送带上下来并进入桶中的 chars 数量,因此,如果我们从桶中取出 charRead chars,我们就知道我们已经获取了所有这些字符。这些被附加到 StringBuilder 上,然后循环再次开始!

关于java - 尝试了解 Android 中的 XML Pull 解析器 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465022/

相关文章:

python - 通过 Web 连接到 API 与 Python

xml - 验证 xsl 中元素是否存在并具有某些特定值

java - Spring MVC : the difference between DeferredResult and ListenableFuture?

java - 使用 Android ExpandableLayout 库

java - 绘制形状时,形状属性未在类之间正确传递 - Java Swing

java - 在Android中通过扬声器强制输出声音

使用 gridview 和 RecyclerView 滚动的 android 布局

.net - 我可以将一个导航器编译的 XPathExpression 与另一导航器一起使用吗?

java - 正则表达式模式接受一个或多个IP地址?

java - 服务器如何了解来自特定区域的传入请求以使用语言环境语言提供网页