1. Le code suivant sérialise le fichier 2.log et l'enregistre dans 2.txt
FileInputStream fin = new FileInputStream("D:\2.log"); FileOutputStream out1 = new FileOutputStream(new File("D:\2.txt")); // ObjectOutputStream oop1 = new ObjectOutputStream(out1); byte[] datas = new byte[1024]; int j = 0; while ((j = fin.read(datas)) > 0) { out1.write(datas); fin.read(datas); } fin.close(); out1.close();
Désérialisation :
Utilisez ObjectInputStream()
FileInputStream fis = new FileInputStream("D:/2.txt");
ObjectInputStream oin = new ObjectInputStream(fis);
oin.readObject();
Erreur : Exception dans le fil de discussion "main " java.io.StreamCorruptedException : en-tête de flux non valide : 3139322E
Comment y remédier ?
Si le fichier est volumineux, comment ajouter du cache lors de la lecture ? J'espère que Daniel pourra m'éclairer, xiexie
Votre problème est que le contenu lu par ObjectInputStream doit être généré en écrivant par ObjectOutputStream. Le contenu du fichier doit être conforme aux exigences de spécification de la sérialisation Java. Le tableau d'octets que vous créez vous-même ne peut pas être utilisé.
protobuf est une méthode flexible, efficace et automatique pour sérialiser des données structurées, tout comme XML, mais elle est plus petite, plus rapide et plus simple. Vous pouvez définir votre propre structure de données puis utiliser le code généré par le générateur de code pour lire et écrire cette structure de données. Vous pouvez même mettre à jour les structures de données sans redéployer le programme.
Qu'il s'agisse de taille ou d'efficacité de sérialisation et de désérialisation, c'est fondamentalement à l'avant-garde que la sérialisation fournie avec JAVA. Plus les données sont volumineuses, plus l'avantage est évident. difficile à utiliser