android 中用poi打开doc文件报错

newstarao 2013-08-27 03:56:29
android测试环境是4.0
poi是最新的
word文件是97-2003
错误是:OutOfMemory
错误位置为下方红色字体处(此段代码在poi源码中):
DocumentEntry dataProps =
(DocumentEntry)directory.getEntry(STREAM_DATA);
_dataStream = new byte[dataProps.getSize()];
directory.createDocumentInputStream(STREAM_DATA).read(_dataStream);

很明显是分配内存不足了。
我测试用的doc文件打开20多M,同样的程序和doc文件在另外一个性能好的机器上不会报错,运行正常。

为了测试手机new 操作时 到底多少可以内存不足我写了一小段程序:
		new Thread() {
public void run() {
try {
int bsize = 1024;
while (true) {
byte[] bytes = new byte[bsize];

bytes = null;
bsize += 102400;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();

测试结果是,我的手机在30M多时报错了。另外那个性能比较好的手机在100多M时才报错。。。

1.我想知道poi打开doc时,doc文件过大 怎么处理?
2.如果不太好处理的话,怎么可以知道手机new操作时能分配的内存大小?
3.有一个olivephone-sdk的jar包,他好像也调用的poi,但是他没有上面的问题,不知道他是修改了poi还是我自己使用有问题。。。求高手解答
...全文
256 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zixuan8083 2013-08-30
  • 打赏
  • 举报
回复
这个问题我也遇到 关注中
newstarao 2013-08-30
  • 打赏
  • 举报
回复
引用 4 楼 Tibib 的回复:
你那内存测试方法有很大问题 Runtime.getRuntime().maxMemory()这个是获得每个Application最大可使用内存
谢谢,不过这个最大值和new 操作能申请的内存数量还不太一样,new能得到的明显少了些。。。不过这个最大值还是有些参考作用的,谢谢了
newstarao 2013-08-30
  • 打赏
  • 举报
回复
引用 3 楼 zxpcomeon 的回复:
手机内存的大小的问题,尤其是HeapSize的设置,刷机时可以修改。 例如: # ADDITIONAL_BUILD_PROPERTIES # dalvik.vm.heapstartsize=5m dalvik.vm.heapgrowthlimit=64m dalvik.vm.heapsize=128m
刷机貌似对我没啥用处。。。
pobi 2013-08-29
  • 打赏
  • 举报
回复
你那内存测试方法有很大问题 Runtime.getRuntime().maxMemory()这个是获得每个Application最大可使用内存
阿鹏兄 2013-08-29
  • 打赏
  • 举报
回复
手机内存的大小的问题,尤其是HeapSize的设置,刷机时可以修改。 例如: # ADDITIONAL_BUILD_PROPERTIES # dalvik.vm.heapstartsize=5m dalvik.vm.heapgrowthlimit=64m dalvik.vm.heapsize=128m
newstarao 2013-08-28
  • 打赏
  • 举报
回复
为什么没人看呢?
newstarao 2013-08-27
  • 打赏
  • 举报
回复
问题解决还有另外100分。。。求高手

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧