android下載xml解析,檔案尾出現NUL導致解析異常的解決方案

來源:互聯網
上載者:User

我在做一個項目時發現:
當我用常用的下載方法 下載xml到sd卡中 然後讀取xml解析時 總是有如下異常:


但程式仍能運行 只是xml解析後的條數變少了 我覺得應該是解析過程中遇到了不能解析的字元
但檢查伺服器端的xml並未發現錯誤 (我還曾一度認為是網路不佳導致的,現在想象真是可笑的誤區)
之後我檢查了下載到本地sd卡的xml檔案,用notepad開啟後 錯誤發現了:


 經過百度 Google 的各種搜素也未找到緣由
我開始認為是我的下載與寫入sd 的方法有問題
但是從論壇或是文章中 看到很多下載檔案與寫入的方法都是這樣的:
 
 
Java代碼 
    /**
     * is流寫入sd卡
     * @param path
     * @param fileName 路徑+名字
     * @param is
     * @return
     */ 
    public File write2SDFromIS(String path,String fileName,InputStream is){ 
        File file = null; 
        OutputStream os = null; 
        try { 
            createSDDir(path); 
            file = createSDFile(path+fileName); 
            os = new FileOutputStream(file); 
 
            byte buffer[] = new byte[1024]; 
            while(is.read(buffer) != -1){ 
                os.write(buffer); 
            } 
//          int bufferLength = 0; 
//          while ( (bufferLength = is.read(buffer)) > 0 ) { 
//              os.write(buffer, 0, bufferLength); 
//          } 
            os.flush(); 
         
             
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        }finally{ 
            try { 
                os.close(); 
            } catch (IOException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
        } 
        return file; 
         
    } 
 
 
我是個初學者 也沒多想 就使用了這段代碼。但經過多次測試後發現
 
Java代碼 
byte buffer[] = new byte[1024]; 
            while(is.read(buffer) != -1){ 
                os.write(buffer); 
            } 
 這段代碼導致了下載後出現NUL符(有時xml較大時 會有部分亂碼 結尾不全的情況)
 
我換用了如下代碼(注釋的內容):
 
Java代碼 
byte buffer[] = new byte[1024]; 
            int bufferLength = 0; 
            while ( (bufferLength = is.read(buffer)) > 0 ) { 
                os.write(buffer, 0, bufferLength); 
            } 
 便解決了 上述問題
我是個菜鳥 如果說原因我只能猜測 可能是錯誤的寫法每次寫入固定1024的長度
而換用有bufferLength的方法write 則規定了長度 避免了不足1024的用NUL代替了吧!
 
因為這個問題困擾了我3天的時間 又未在網上找到相應的解決辦法
為了方便和我一樣的菜鳥 大家少走彎路 特寫了這篇文章!

作者“libo19881179”
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.