[問題] Java字串長度限制問題

看板AndroidDev作者 (CheeseMoon)時間9年前 (2016/04/26 14:29), 9年前編輯推噓0(0012)
留言12則, 2人參與, 最新討論串1/1
各位前輩好 我最近想做一個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://www.ptt.cc/bbs/AndroidDev/M.1461652182.A.716.html

04/26 16:53, , 1F
04/26 16:53, 1F

04/26 17:01, , 2F
簡單來說 就是log一次沒辦法印那麼多字元
04/26 17:01, 2F
原來是Log的問題 可是這個String似乎在程式裡也沒辦法使用欸 在OpenCV的人臉偵測範例裡要將人臉訓練結果以String的方式 載入到CascadeClassifier形態的變數 我做到這一步程式就會崩潰了 我有試過用比較短的XML匯入就沒事(隨便找一個跟OpenCV無關的XML) 當然結果是無法使用但程式不至於崩潰 可是用OpenCV提供的訓練結果就不行 所以我想說是不是XML匯入到String的時候資料是不完整的 因而導致程式崩潰 我有試過直接將XML的內容複製貼上到String裡 結果完全不能編譯 並且提示字串長度過長 不知到跟我的問題有沒有相關 ※ 編輯: ab790815 (59.120.243.46), 04/27/2016 09:07:38

04/27 09:32, , 3F
丟進String後 有試過print該String的length()嗎
04/27 09:32, 3F

04/27 09:38, , 4F
如果長度只有6x萬的話 應該是沒有問題的
04/27 09:38, 4F

04/27 09:55, , 5F
不好意思,我沒注意看, 如果你是String str = 結果
04/27 09:55, 5F

04/27 09:57, , 6F
constant string的長度是有限制的 (似乎是64K)
04/27 09:57, 6F

04/27 09:58, , 7F
你要不要換個方式讀取XML的結果 例如先存成文字檔
04/27 09:58, 7F

04/27 10:02, , 8F
或者是換個沒有長度限制的compiler
04/27 10:02, 8F

04/27 10:04, , 9F
用無關的XML沒問題,用正確(但長度不明)的字串會有錯誤
04/27 10:04, 9F

04/27 10:05, , 10F
不是該看錯誤內容? String長度理論上到Integer.MAX_VALUE
04/27 10:05, 10F

04/27 10:06, , 11F
你的長度在記憶體不過1M左右,根本沒有很長...
04/27 10:06, 11F

04/27 10:06, , 12F
TextView裡面還不是同樣用字串去存的...
04/27 10:06, 12F
這樣看起來我似乎是搞錯方向了 應該是不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
文章代碼(AID): #1N7mhMSM (AndroidDev)