试图理解Android中的XML Pull Parser - Java

时间:2016-07-19 17:34:35

标签: 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(缓冲区)是什么意思?

2 个答案:

答案 0 :(得分:0)

它从流中读取最多500个字节(缓冲区的长度)并将其放入缓冲区。 charRead是它实际读取的字符数 - 从0到500,取决于等待的数据量。如果发生错误,charRead也可以小于0.

答案 1 :(得分:0)

我会尝试将其解释为一个直观的例子。

想象一下InputStream作为从墙上的洞(网络)出来的传送带。传送带上有一系列char,但您需要将它们带到您身边才能将它们从传送带上取下并将它们加工到您的桶中(buffer,它只能容纳500 char)。当您致电isr.read(buffer)时,传送带操作员会被告知启动传送带。传送带将开始滚动,将char物体倾倒到铲斗中(buffer)。这将一直持续到

一个。传送带将500 chars转储到存储桶(buffer)或

B中。传送带从chars出来,从墙上的孔(网络)出来。

代码行:

if(charRead <= 0){
    break;
}

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

代码行:

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

告诉传送带操作员停止他做的事情(在传送带停止移动之后因为500 chars被倾倒入铲斗或传送带用尽chars)并取出所有内容(buffer),并取出charRead数量的chars。基本上,这就是桶中的所有内容,因为我们知道charRead是多少chars从传送带上掉下来并进入水桶,所以如果我们采取{{1}来自桶的charRead,我们知道我们得到了所有这些。这些被附加到chars上,循环重新开始!