2011-07-26 4 views
5

양식을 인쇄 할 때 잘못되었거나 번거로운 솔루션의 일부로 XML로 저장된 MS-Word 문서를 가져 와서 해당 XML을 Groovy 문자열로 저장하려고합니다. $ {fillOutTheFormProgrammatically}Groovy가 내 유니 코드 문자열이 너무 길다라고 말합니다

그러나 MS-Word 문서의 크기가 큰 경우 String은 113100 유니 코드 문자이고 Groovy는 65536으로 제한됩니다.이 변경 방법이 있습니까? 끈을 쪼개지 않고 붙어 있니? 내가 할 노력하고있어 무엇

Groovy - need to make a printable form

.

업데이트 : Groovy String이 너무 길다는 것이 확실합니다. 일반 문자열이 모두 좋다고 생각합니다. 전략을 바꾸고 파일에 문자열을 넣으십시오. %! % variable_name %! %와 (과) 쉽게 찾을 수 있습니다. .replace (... 어 ... 여기에 새로운 질문이 오는 것을 느낍니다 ...

답변

5

당신이 직접이 문자열을 내장하고 있습니까 (난 당신 만의 작은 부분을 원하는 가정) XML의 문자 수천 hunderds에 의존와 함께 시작하는 데 필요한 데이터 만 저장하지 그루비 코드? jvm에는 문자열 상수의 길이에 제한이 있습니다. 자세한 내용은 VM Spec을 참조하십시오.

작은 부분으로 문자열을 분할하고 런타임에 연결하는 것이 좋습니다. 더 나은 해결책은 텍스트를 외부 파일에 저장하고 코드에서 내용을 읽는 것입니다. 이 파일을 코드와 함께 패키징하고 Class#getResourceAsStream을 사용하여 클래스 경로에서 액세스 할 수도 있습니다.

+0

파일에 텍스트를 저장 한 다음 잘 읽는 것이 좋습니다! 감사! – MeIr

0

예외 당신이 점점? 나는 기본적으로 자바 문자열로 그루비 문자열, 65536로 제한됩니다 생각하지 않습니다. 당신이 어딘가에 재귀 위해 노력하고 65536 호출 스택 한계를 치는 것 같은

나에게 소리.

그러나 한마디로 100K + 문자를 메모리에로드하는 것은 과도한 것처럼 보입니다.

SAX 파서 또는 s를 사용하여 XML을 파싱하지 않는 이유는 무엇입니까? 결과를 얻기 위해 imilar?

또는 왜보다는

+0

고정 콜 스택 제한이 있습니까? 출처? –

+1

@Michael 예, 최대 재개 깊이는 스택 크기로 설정됩니다 (Java의 경우 -Xss 매개 변수가 기본값을 변경할 수 있음) ... 실제로 실제로 잘못되었습니다. 이는 기본적으로 65536 개 이상의 방법입니다 (http : //www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) –