J'ai une liste d'environ 20 000 objets, qui ont à leur tour une hiérarchie très énorme. J'ai besoin de jeter les objets dans un fichier, de sorte que je puisse la lire plus tard à tout moment pendant mon processus. Maintenant, mon problème est que j'ai travaillé sur Java, mais pas beaucoup de sérialisation et je n'ai pas autant de connaissances comment faire cela. P>
Dans ce cas aussi loin que je sache, je dois utiliser à la fois une série de sérialisation ANE de sérialisation. Quelqu'un peut-il aider s'il vous plait. De plus, je peux utiliser une nouvelle API ou une nouvelle sérialisation Java normale. P>
Cordialement. P>
5 Réponses :
Je vous donne un exemple d'exemple objet d'écriture et de lecture p>
Une méthode lisechabject () code> qui lit un objet dans une variable locale, puis renvoie un
booléen code> plutôt que la variable n'est pas très utile. Calling
Disponible () Code> n'est-il pas utile non plus, et spécifiquement
disponible () == 0 code> n'est pas un test valide pour EOF. Vous devriez juste boucler appeler
lisechatject () code> jusqu'à
eofexception code> est lancé.
Je viens de écrire un cas simple. Je boucle et imprimez-le. ReadObject est ma propre fonction, pas un java. @Ejp
Je vais le répéter plus clairement. Une méthode lisechabject () code> qui ne renvoie pas l'objet qui a été lu est complètement inutile. Les autres objections restent également.
ok merci :)) Mais je suis heureux maintenant, parce que je l'ai écrit quand j'ai étudié Java, merci de commenter ^^.
Regardez ce lien http://www.java2s.com/code/java /File-input-Output/ObjectSerialization.htm
C'est quelque chose comme ceci: n'oubliez pas d'implémenter une interface sérialisable dans toutes les classes que vous souhaitez enregistrer.
et mettre le modificateur "transitoire" dans tous les champs que vous ne voulez pas enregistrer.
(E.G. Cache de liste transitoire privée;) P> P>
JSON est toute la rage récemment afin que vous puissiez l'utiliser. Jackson est une API agréable pour la sérialisation / la désérialisation du JSON. En tant que bonus, vous obtenez une interopérabilité avec d'autres plates-formes. P>
Si vous n'êtes pas affrayé de XML Utilisez Jaxb P>
Bien sûr, vous pouvez toujours utiliser la sérialisation binaire, mais le texte de l'OMI est plus facile à gérer que les blobs. P>
ci-dessous est le code pour écrire des objets à fichier à l'aide de XMlenCoder, en supposant que votre objet implémente une interface sérialisable.
FileInputStream is=new FileInputStream("c:/temp/serialized.xml"); XMLDecoder decoder=new XMLDecoder(is); Object object=(Object)decoder.readObject(); decoder.close();
Plutôt que d'économiser chaque objet individuellement, vous pouvez enregistrer directement la liste des objets. J'utilise ci-dessous le code pour y parvenir. Bien que je suis sérialisé pour le clonage, il devrait suffire d'apprendre les bases.
public static List<EmpoyeeTO> deepCloneList( List<EmpoyeeTO> objectList) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(objectList); oos.flush(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); return (List<EmpoyeeTO>) ois.readObject(); }catch(EOFException eof){ return objectList; } catch (Exception e) { e.printStackTrace(); return null; } }
C'était exactement ce dont j'avais besoin, bien que pour un Moodifiablecollection code>, et ce code le fait simple. Propre, direct et facile à comprendre. Je ne peux pas comprendre comment il ne recevait aucun vote car il le fait exactement ce que le titre de la question signifie.
Probablement, parce que cela ne se sérialiste pas dans un fichier, comme le dit le titre.
Pourquoi avez-vous besoin de jeter les objets dans un fichier i>? Pouvez-vous utiliser un dB à la place?