作者ab790815 (CheeseMoon)
看板AndroidDev
标题[问题] Java字串长度限制问题
时间Tue Apr 26 14:29:40 2016
各位前辈好
我最近想做一个android结合opencv的人脸侦测程式
我研究过opencv的facedetect.cpp范例
打算把它搬到android上执行
可是我遇到一个问题
在这个范例里需要载入haarcascade_frontalface_alt.XML的人脸训练结果
我把XML的内容存到String後用Log印出
发现不能完整显示
只读到4千多个字元就断尾了
但是在TextView却可以
而且用length检验字串长度也是完整的
这个XML的字串长度高达676709
我觉得是Java的String型别可能有长度限制的关系
简单来说
我可以用TextView直接印出完整资料
但无法在程式里运用这个字串的资料
想请问各位有没有遇过类似状况以及如何解决
我的开发环境是 Android Studio 2.0 + OpenCV4Android 3.0.0
可能有些人会说可以用JNI
但是我在Android Studio里尝试写OpenCV的JNI一直失败
最多只能在我的Android 4.0.3的实体手机能执行
模拟器或5.0的手机都不能跑
所以我才会想用纯Java来写
感谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.120.243.46
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1461652182.A.716.html
2F:→ FlowerYen: 简单来说 就是log一次没办法印那麽多字元 04/26 17:01
原来是Log的问题
可是这个String似乎在程式里也没办法使用欸
在OpenCV的人脸侦测范例里要将人脸训练结果以String的方式
载入到CascadeClassifier形态的变数
我做到这一步程式就会崩溃了
我有试过用比较短的XML汇入就没事(随便找一个跟OpenCV无关的XML)
当然结果是无法使用但程式不至於崩溃
可是用OpenCV提供的训练结果就不行
所以我想说是不是XML汇入到String的时候资料是不完整的
因而导致程式崩溃
我有试过直接将XML的内容复制贴上到String里
结果完全不能编译
并且提示字串长度过长
不知到跟我的问题有没有相关
※ 编辑: ab790815 (59.120.243.46), 04/27/2016 09:07:38
3F:→ FlowerYen: 丢进String後 有试过print该String的length()吗 04/27 09:32
4F:→ FlowerYen: 如果长度只有6x万的话 应该是没有问题的 04/27 09:38
5F:→ FlowerYen: 不好意思,我没注意看, 如果你是String str = 结果 04/27 09:55
6F:→ FlowerYen: constant string的长度是有限制的 (似乎是64K) 04/27 09:57
7F:→ FlowerYen: 你要不要换个方式读取XML的结果 例如先存成文字档 04/27 09:58
8F:→ FlowerYen: 或者是换个没有长度限制的compiler 04/27 10:02
9F:→ ssccg: 用无关的XML没问题,用正确(但长度不明)的字串会有错误 04/27 10:04
10F:→ ssccg: 不是该看错误内容? String长度理论上到Integer.MAX_VALUE 04/27 10:05
11F:→ ssccg: 你的长度在记忆体不过1M左右,根本没有很长... 04/27 10:06
12F:→ ssccg: TextView里面还不是同样用字串去存的... 04/27 10:06
这样看起来我似乎是搞错方向了
应该是不String的问题
而是我应该要先了解OpenCV的CascadeClassifier该如何使用
可能是我给的字串内容是有误的才导致崩溃
感谢两位前辈指教
我再尝试看看
※ 编辑: ab790815 (59.120.243.46), 04/27/2016 10:31:09
-------------------------------------------------------------------
我找到问题了
我真的是搞错CascadeClassifier的用法了
要塞给CascadeClassifier是XML的路径
而不是内容
※ 编辑: ab790815 (59.120.243.46), 04/27/2016 13:52:17