2011-07-26 27 views
5

Ben XML olarak kaydedilebilir ve ben gelenekselleşmiş bir dize olarak bu XML depolamak çalışıyorum, bir MS-Word belgesi almış bir form yazdırmak için benim muhtemelen yanlış ve hantal çözümün bir parçası olarak Böylece, $ {fillOutTheFormProgrammatically}Groovy benim Unicode dizesi çok uzun olduğunu söyler

Ancak, MS-Word belgelerinin olduğu kadar büyük olduğu halde, String 113100 unicode karakterdir ve Groovy 65536 ile sınırlı olduğunu söyler. Bunu değiştirmenin bir yolu var mı yoksa ben miyim? ipi bölmekle mi takıldınız? Yapmaya çalıştığım şey bu

Groovy - need to make a printable form

.

Güncelleme: .. Ben normal dize tüm iyi olabileceğini düşünüyorum bir Groovy dize onun çok uzun açık olmak. Stratejiyi değiştirmek ve dosyaya bazı dizeler koymak kolayca%!% Variable_name%!% Olarak bulabilirim ve sonra .replace (... uh burada yeni bir soru geliyor hissediyorum ...

cevap

5

Eğer doğrudan bu dizeyi katıştırma Are (ben sadece küçük bir bölümünü istiyorum varsayıyorum) xml karakter binlerce hunderds güvenerek ile başlamak gerekir sadece verileri kaydetmek değil müthiş kodun? jvm kendisi dize sabitleri uzunluğuna sınırı vardır detaylar ilginizi çekiyorsa VM Spec görüyoruz.

bir çirkin geçici çözüm küçük parçalar halinde dize bölmek ve zamanında bunları bağlamak için olabilir. Metni harici bir dosyaya kaydetmek ve içeriği kodunuzdan okumak daha iyi bir çözüm olacaktır. Bu dosyayı ayrıca kodunuzla birlikte paketleyebilir ve Class#getResourceAsStream kullanarak sınıf yolundan erişebilirsiniz.

+0

Tasarruf metin ve daha sonra o inşaat büyük okuma! Teşekkürler! – MeIr

0

Ne istisnai? alıyorsunuz? Ben temelde bir Java dize olarak Groovy string, 65536 ile sınırlıdır inanmıyorum. Eğer bir yere recurse çalışıyor ve 65536 çağrı yığını sınırını vuruyor gibi

geldi bana.

Bununla birlikte, bir seferde belleğe bir 100K + char yüklendiğinde söylenen bu overkill gibi görünmüyor ..

Neden bir SAX ayrıştırıcısı veya XML kullanarak ayrıştırmayın sonuçları almak için imilar?

Ya da niye yerine

+0

sabit çağrı yığını sınırı yoktur? Kaynak? –

+1

@Michael Yeah, maksimum arama derinliği yığın boyutuna ayarlanır (java için -Xss' parametresi varsayılanı değiştirebilir) ... ve aslında yanılmışım, [varsayılan olarak 65536'dan fazla] (http : //www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) dosyaya –