android:解析大部分数据

时间:2011-02-03 12:07:36

标签: android xml parsing base64 sax

我正在玩android并尝试接收文件(pdf书)。为此,我编写了Servelt,将该书编码为base64字符串并将其放入XML文档中。该文档还包含名称,作者和IBSN字段。我顺利收到了它。如果是一本小书,我甚至可以解码它并打开。但如果大小超过2mb,我会得到OutOfMeoryError。 我的解析器代码是:

public void characters(char[] ch, int start, int length)
        throws SAXException {

    if(builder==null) builder = new StringBuilder();
        builder.append(new String(ch, start, length));

然后我执行以下操作:

fos = new FileOutputStream(Environment.getExternalStorageDirectory().toString()+"/book.pdf", false);
            byte[] toWrite = Base64.decode(builder.toString(), Base64.DEFAULT);
            fos.write(toWrite);
            fos.flush();
            fos.close();

有人知道我怎么能解析它而不是错误?我试图解析它 characters方法(我的意思是使用小缓冲区),但它失败了...非法基础64字符串。

1 个答案:

答案 0 :(得分:1)

  

有人知道我怎么能解决它错误?

你很可能,因为没有足够的内存供你使用。

明智的程序员不会将大型二进制文件转换为“base64字符串并将其放入XML文档中”。明智的程序员会:

  • 将元数据(名称,作者,ISBN)放在PDF中的属性字段中,这是一个很好的Java解决方案,但对Android来说可能是一个问题,因为在这些字段中获取的库可能有效也可能无效(例如,iText);或
  • 分别下载两个文件(一个包含元数据的XML,其中包含PDF文件的URL);或
  • 将PDF和XML文件打包到单个存档(例如ZIP)中并下载存档

可能还有其他解决方案,但它们应该为您提供一个起点。