我正在玩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字符串。
答案 0 :(得分:1)
有人知道我怎么能解决它错误?
你很可能,因为没有足够的内存供你使用。
明智的程序员不会将大型二进制文件转换为“base64字符串并将其放入XML文档中”。明智的程序员会:
可能还有其他解决方案,但它们应该为您提供一个起点。