2011-07-26 13 views
5

Como parte de mi solución probablemente incorrecta y engorrosa para imprimir un formulario, he tomado un documento de MS-Word, guardado como XML y estoy tratando de almacenar ese XML como una cadena maravillosa así que puedo $ {fillOutTheFormProgrammatically}Groovy dice que mi cadena Unicode es demasiado larga

Sin embargo, con los documentos de MS-Word siendo tan grandes como lo son, el String tiene 113100 caracteres Unicode y Groovy dice que está limitado a 65536. ¿Hay alguna forma de cambiar esto o estoy atascado con la división de la cadena?

Groovy - need to make a printable form

Eso es lo que estoy tratando de hacer.

Actualización: para que quede claro su demasiado largo de un maravilloso cadena .. Creo que una cadena normal podría ser todo lo bueno. Voy a cambiar la estrategia y poner algunas cadenas en el archivo que puedo encontrar fácilmente como%!% Nombre_variable%!% Y luego hacer .replace (... uh siento que viene una nueva pregunta aquí ...

Respuesta

5

¿Está la incrustación de esta serie directamente en ¿Tu código groovy? El jvm en sí tiene un límite en la longitud de las constantes de cadena; consulte VM Spec si le interesan los detalles.

Una fea solución alternativa podría ser la de dividir la cadena en partes más pequeñas y concatenar en tiempo de ejecución. Una mejor solución sería guardar el texto en un archivo externo y leer el contenido de su código. También puede empaquetar este archivo junto con su código y acceder a él desde classpath usando Class#getResourceAsStream.

+0

Guardar texto en un archivo y luego leerlo ¡funciona muy bien! ¡Gracias! – MeIr

0

Qué excepción te va? no creo maravillosa cadena se limita a 65.536, ya que es básicamente una serie Java.

me suena como que está intentando recursivo en algún lugar y golpear el límite de la pila 65536 llamada.

Dicho esto, sin embargo, cargar una char de 100K + en la memoria de una vez parece excesivo ...

¿Por qué no analiza el XML utilizando un analizador SAX o s? imilar para obtener los resultados?

O por qué no guardar sólo los datos que necesita para empezar en vez de depender de hunderds de miles de caracteres de XML (que supongo que sólo desea una pequeña sección de)

+0

¿Hay un límite de pila de llamadas fija? ¿Fuente? @ Michael –

+1

Sí, la profundidad resursion máxima se establece en el tamaño de la pila (el parámetro '-Xss' para Java puede alterar el valor por defecto) ... y, de hecho, yo estaba equivocado, que es [forma más de 65536 por defecto] (http : //www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) –

Cuestiones relacionadas