2009-12-04 12 views

Répondre

1

Comment l'imprimer sur une ligne?

  • utilisant plusieurs System.out.print (String s)
  • en utilisant System.out.println (String verybigstring)

dans le second cas, il faut beaucoup plus de mémoire ...

Si vous voulez plus de mémoire pour Eclipse, pourrait essayer d'augmenter les éclipses mémoire en changeant la valeur -Xmx eclipse.ini

+0

Deuxième option. Si nous sortons juste cela dans un fichier en utilisant 'FileWriter' ou similaire serait-ce plus de mémoire efficace? –

+0

Tant que vous n'essayez pas de charger le fichier complet dans une seule chaîne, je suppose que tout ira bien. Ainsi que pour Sysout comme pour FileWriters ou d'autres ... – Fortega

+0

Nous chargeons le fichier dans une seule chaîne qui fonctionne bien. C'est seulement la sortie qui cause un problème. Pourquoi Eclipse a-t-elle besoin de tant de mémoire pour produire 5 Mo? –

1

Je vais supposer que vous construisez une org.w3c.Document, et en l'écrivant en utilisant un sérialiseur. Si vous construisez une chaîne XML à la main, vous êtes presque assuré de produire quelque chose qui est presque-mais-pas-tout à fait XML, et je suggère fortement de corriger cela en premier. Cela dit, si vous écrivez à un flux du sérialiseur (et que System.out est un flux), alors vous devriez écrire directement dans le flux plutôt que d'écrire dans une chaîne et d'imprimer cela (ce que vous ' d faire avec un StringWriter). La raison de ceci est que le sérialiseur XML traitera correctement les encodages de caractères, tandis que le sérialiseur vers String to stream ne le fera pas.


Si vous n'êtes pas en train de construire un DOM, et sont préoccupés par les besoins en mémoire de le faire, alors je suggère à la recherche à la bibliothèque XML pratique (que je maintiens), notamment le paquet builder. Il utilise des nœuds légers, qui sont ensuite transmis via un sérialiseur à l'aide d'une transformation SAX.


Modifier en réponse à un commentaire:

OK, vous avez le sérialiseur couvert de XStream. Je vais ensuite supposer que vous appelez XStream.toXML(Object) pour produire la chaîne, et vous recommandons d'appeler la variante toXML(Object, OutputStream) et de lui transmettre la sortie réelle. La raison en est que XML est très sensible à l'encodage des caractères, qui est souvent cassé lors de la conversion de chaînes en flux.

Cela peut, bien sûr, causer des problèmes avec la construction de votre requête POST, en particulier si vous utilisez une bibliothèque qui ne vous fournit pas un OutputStream.

+0

Nous utilisons des services web REST pour envoyer/recevoir du XML. Nous utilisons XStream pour faire la conversion POJO XML <->. Donc, quand nous créons la requête (5MB xml) nous avons les données dans une chaîne que nous spécifions dans le corps de notre demande 'POST'. –

2

On dirait que c'est le panneau de la console qui explose. Envisagez de limiter sa taille de tampon.

EDIT: C'est dans les préférences. Recherchez la console.

+0

et, BTW, qui veut vraiment voir un grand fichier XML 1 ligne sur la console? Assez sûr, le concepteur de la console n'a pas prévu cela ;-) –