2011-07-26 80 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) –