2011-07-26 112 views
5

作爲我可能錯誤和繁瑣的解決方案打印出一個表單的一部分,我採取了一個MS-Word文檔,保存爲XML,我試圖將該XML存儲爲一個常規字符串這樣我就可以$ {fillOutTheFormProgrammatically}Groovy說我的Unicode字符串太長

但是,MS-Word文檔的大小與字符串一樣大,字符串是113100個Unicode字符,而Groovy則將其限制爲65536.有什麼方法可以改變這種情況嗎?被分裂的字符串卡住了?

Groovy - need to make a printable form

這就是我想要做的事。

更新:要清除它太長的Groovy字符串..我認爲一個普通的字符串可能會很好。要改變策略並在文件中添加一些字符串,我可以很容易地找到像%!%variable_name%!%然後做替換(...呃,我覺得這裏有一個新問題...

回答

5

你直接嵌入該字符串hunderds數據你的groovy代碼? jvm本身對字符串常量的長度有限制,如果您對細節感興趣,請參見VM Spec

醜陋的解決方法可能是將字符串拆分爲較小的部分並在運行時將它們連接起來。更好的解決方案是將文本保存在外部文件中並從代碼中讀取內容。您也可以將此文件與您的代碼一起打包,然後使用Class#getResourceAsStream從類路徑中訪問它。

+0

將文本保存到文件,然後閱讀它效果很好!謝謝! – MeIr

0

什麼例外你好嗎?我不相信Groovy的字符串被限制爲65536,因爲它基本上是一個Java字符串。

聽起來像你對我試圖遞歸的地方,打了65536調用堆棧限制。

然而,據說一次加載100K +字符到內存看起來似乎是矯枉過正..

爲什麼不使用SAX解析器解析XML同樣得到結果呢?

或者爲什麼不救就需要開始,而不是依靠成千上萬的XML字符的(我假設你只需要一小部分)

+0

有一個固定的調用堆棧限制?資源? –

+1

@Michael是的,最大resursion深度設置爲堆棧大小(Java的'-Xss'參數可以改變默認值)...實際上,我錯了,它[默認情況下超過65536](http ://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) –