8
votes

Serializing une liste d'objets dans un fichier en Java

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.

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.

Cordialement.


1 commentaires

Pourquoi avez-vous besoin de jeter les objets dans un fichier ? Pouvez-vous utiliser un dB à la place?


5 Réponses :


0
votes

Je vous donne un exemple d'exemple xxx

objet d'écriture et de lecture xxx


4 commentaires

Une méthode lisechabject () qui lit un objet dans une variable locale, puis renvoie un booléen plutôt que la variable n'est pas très utile. Calling Disponible () n'est-il pas utile non plus, et spécifiquement disponible () == 0 n'est pas un test valide pour EOF. Vous devriez juste boucler appeler lisechatject () jusqu'à eofexception 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 () 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 ^^.



11
votes

Regardez ce lien http://www.java2s.com/code/java /File-input-Output/ObjectSerialization.htm C'est quelque chose comme ceci: xxx

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;)


0 commentaires

1
votes

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.

Si vous n'êtes pas affrayé de XML Utilisez Jaxb

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.


0 commentaires

0
votes

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();


0 commentaires

3
votes

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;
        }
    }


2 commentaires

C'était exactement ce dont j'avais besoin, bien que pour un Moodifiablecollection , 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.