`
libo19881179
  • 浏览: 269406 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【BUG解决】android下载解析XML~出现NUL与乱码的解决方法!

阅读更多

http://androiddada.iteye.com/

 

我在做一个项目时发现:

当我用常用的下载方法 下载xml到sd卡中 然后读取xml解析时 总是有如下异常:


但程序仍能运行 只是xml解析后的条数变少了 我觉得应该是解析过程中遇到了不能解析的字符

但检查服务器端的xml并未发现错误 (我还曾一度认为是网络不佳导致的,现在想象真是可笑的误区)

之后我检查了下载到本地sd卡的xml文件,用notepad打开后 错误发现了:



 经过百度 谷歌 的各种搜素也未找到缘由

我开始认为是我的下载与写入sd 的方法有问题

但是从论坛或是文章中 看到很多下载文件与写入的方法都是这样的:

 

 

	/**
	 * 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;
		
	}

   http://androiddada.iteye.com/

 

我是个初学者 也没多想 就使用了这段代码。但经过多次测试后发现

 

byte buffer[] = new byte[1024];
			while(is.read(buffer) != -1){
				os.write(buffer);
			}

 这段代码导致了下载后出现NUL符(有时xml较大时 会有部分乱码 结尾不全的情况)

 

我换用了如下代码(注释的内容):

 

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天的时间 又未在网上找到相应的解决办法 

为了方便和我一样的菜鸟 大家少走弯路 特写了这篇文章!

http://androiddada.iteye.com/

 

  • 大小: 287.9 KB
  • 大小: 117.9 KB
2
0
分享到:
评论
2 楼 libo19881179 2011-11-21  
hubin4 写道
我说我下的MP3听起来怎么怪怪的.

确实啊,

1.byte buffer[] = new byte[1024]; 
2.            while(is.read(buffer) != -1){ 
3.                os.write(buffer); 
4.            } 

这代码是绝对不行的.

是的,我学习时看到网上有好多转帖的文章都使用的这种错误方法,误导了大家。
1 楼 hubin4 2011-11-19  
我说我下的MP3听起来怎么怪怪的.

确实啊,

1.byte buffer[] = new byte[1024]; 
2.            while(is.read(buffer) != -1){ 
3.                os.write(buffer); 
4.            } 

这代码是绝对不行的.

相关推荐

    永久解决VSCode终端中文乱码问题

    在本文中,我们将深入探讨如何永久解决Visual Studio Code(VSCode)终端中的中文乱码问题。VSCode是一款广受欢迎的代码编辑器,但在某些情况下,尤其是在Windows环境下,用户可能会遇到终端显示中文字符时出现乱码...

    con. nul .文件夹的删除方法

    nul 文件夹的删除方法 在日常使用计算机的过程中,我们可能会遇到一些特殊名称的文件夹(如“con.”、“nul.”等),这些文件夹由于与系统保留的设备名相同或相似,常常导致无法正常删除的问题。本文将详细介绍...

    解决windows输出彩色字体(ANSI转义序列)乱码的问题

    在Windows操作系统中,由于默认不支持ANSI转义序列,因此在尝试显示带有这些序列的彩色文本时,可能会出现乱码问题。ANSI转义序列是一种控制字符序列,常用于控制终端的颜色、光标位置等,它在Linux和macOS等系统中...

    delphi for android 条码扫描初步解决方案

    Delphi for Android 条码扫描初步解决方案 Delphi 是一种功能强大且广泛应用的编程语言,Android 是当前最流行的移动操作系统之一。近年来,随着移动设备的普及,条码扫描技术也得到了广泛应用。在这个解决方案中,...

    AWT在linux下的中文乱码

    然而,由于编码差异和字体支持的问题,在Linux系统下,AWT可能会遇到显示中文字符时出现乱码的状况。 首先,我们需要理解Linux系统的默认编码通常是UTF-8,而Java AWT在某些情况下可能默认使用其他编码,如ISO-8859...

    将SQL数据库表转换成XML文件输出(脚本)

    ### 将SQL数据库表转换成XML文件输出(脚本) #### 概述 在实际工作中,经常需要将数据库中的表数据导出为其他格式以便于传输或与其他系统进行交互。其中,XML作为一种广泛使用的数据交换格式,具备良好的跨平台性...

    解包打包android内核system.img文件所需工具

    批处理有一处bug:每打包一次会把odex文件删除掉,导致在后面的打包过程中会出现找不到:system/framework/core.odex类似的错误,因此只需要在打包完后不删除odex文件即可,找到del /f !apkx!.odex 1>nul 2>nul改为...

    java的sql解析器jsqlparser

    Java的SQL解析器JSQLPaser是一个强大的开源库,专门设计用于处理SQL语句的解析工作。这个库允许开发者分析SQL语句的结构,提取出其中的关键元素,如列名、表名、别名以及查询条件,从而在Java应用程序中实现对SQL的...

    桌面上的图标删不掉解决方法.docx

    桌面上的图标删不掉解决方法 在本文中,我们将讨论桌面上的图标删不掉解决方法。有时候,我们安装了一个游戏或者软件,然后发现有弹出窗口等恶意行为,当想删除其游戏或者软件的时候,对话框提示已经删除了软件,但...

    基于Android adb的自动截图批处理

    首先,Android Debug Bridge是一个强大的命令行工具,是Android SDK的一部分,它允许开发者通过USB或网络连接与Android设备进行通信。adb支持多种功能,包括安装和卸载应用、查看设备状态、传输文件以及我们关注的...

    unity3d 打包成webgl 错误解决办法

    在尝试将项目打包成WebGL格式时,开发者可能会遇到一些问题,特别是与il2cpp相关的错误。"il2cpp.exe did not run properly!"这个错误提示表明在编译IL( Intermediate Language)代码到JavaScript和WebAssembly的...

    RASA FAQ数据集 nul.yaml responses.yaml

    在这个上下文中,"RASA FAQ数据集 nul.yaml responses.yaml"指的是使用RASA框架创建的FAQ(常见问题解答)数据集,其中包含两个关键文件:`nlu.yaml`和`responses.yaml`。 1. **nlu.yaml**: 这个文件是RASA的自然...

    如何测试Android APP的耗电量? Android自动化测试脚本入门

    ### 如何测试Android APP的耗电量? 在移动应用开发领域,优化应用的电池消耗是提升用户体验的关键环节之一。本文将详细介绍如何通过ADB工具以及编写批处理(bat)脚本来实现Android应用耗电量的测试,帮助开发者更...

    axis2常见异常总结

    解决方法是将 Axis2 创建的 WebService 方法参数类型与调用它时传给它的参数类型完全一致。例如,我们可以将 public void createIndex(String indexDirectory,Analyzer ana,String xmlFolder) 方法修改为 public ...

    解决git报错问题Null系统资源文件

    如果以上方法都无法解决问题,可以考虑重新安装Git,或者寻求社区支持,提供更详细的错误日志,以便更准确地定位问题所在。在解决问题的过程中,保持耐心和细致是关键,同时定期备份数据也是防止类似问题发生的重要...

    桌面图标删不掉怎么办?桌面图标删不掉的解决方法.docx

    本文将介绍几种解决桌面图标删不掉问题的方法。 首先,你可以尝试通过系统内置的桌面清理功能来解决问题。在桌面空白处右键点击,选择“属性”,然后进入“桌面”选项卡,再点击“自定义桌面”。在这里,你可以找到...

    很强悍的删除系统垃圾批处理工具

    reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\WorkgroupCrawler\Shares" /f >nul 2>nul echo ::用户运行或操作历史记录--注册表:: reg delete "HKCU\Software\Microsoft\Windows\Current...

    解决IE7不能安装的问题

    ### 解决IE7不能安装的问题 #### 背景与挑战 在进行互联网浏览器的升级过程中,用户可能会遇到各种各样的问题。其中一个较为常见的问题是Internet Explorer 7(以下简称IE7)无法正常安装的情况。本文将详细探讨...

    Android模拟用户点击的实现方法

    在实际应用中,用户可能还需要参考Android官方文档或者Google搜索相关资料来解决实际遇到的问题。 总结来说,Android模拟用户点击的实现方法主要依赖于ADB命令和monkeyrunner工具,二者各有特点和适用场景。开发者...

    局域网共享无法访问怎么办?教你重新设置局域网!.pdf

    **步骤3:** 修改工作组名称的方法是:在“控制面板”中找到“系统与安全”,然后选择“系统”。在左侧的菜单中点击“高级系统设置”,接着在弹出的“系统属性”对话框中切换到“计算机名”标签页。在这里可以更改...

Global site tag (gtag.js) - Google Analytics