2017-05-17 3 views
0
public static void main(String[] args) throws IOException { 
    // TODO Auto-generated method stub 
    // Load file with 17 million digit long number 
    BufferedReader Br = new BufferedReader (new FileReader("test2.txt")); 
    String Line = Br.readLine(); 

     try { 

     // create a new file with an ObjectOutputStream 
     FileOutputStream out = new FileOutputStream("test.txt"); 
     ObjectOutputStream oout = new ObjectOutputStream(out); 

     // write the number into a new file 
     oout.writeObject(Line); 

     // close the stream 
     oout.close(); 

     // create an ObjectInputStream for the new file 
     ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt")); 

     // convert new file into a BigInteger 
     BigInteger Big = (BigInteger) ois.readObject(); 


     } catch (Exception ex) { 
     ex.printStackTrace(); 
     } 

    } 

C'est un programme que j'ai créé pour apprendre à utiliser Input/OutputStream. Tout fonctionne sauf que j'obtiens une erreur en essayant de transformer mon fichier en BigInteger.
java.lang.String ne peut pas être converti en java.math.BigInteger à ReadOutPutStream.main
Je suis nouveau à ce sujet, donc je fais probablement une erreur simple, qu'est-ce que je fais mal?Transformation d'un InputStream en BigInteger

Répondre

1

Vous avez écrit une chaîne dans le fichier avec

oout.writeObject(Line); 

Par conséquent, lorsque vous lisez un objet à partir du flux, il sera également un String. Vous ne pouvez pas convertir un String en BigInteger afin d'obtenir une exception. Je sais que forme votre question précédente que vous voulez sérialiser l'BigInteger pour gagner du temps lors de la désérialisation du système de fichiers, afin de résoudre votre problème, vous devez écrire un BigInteger au courant au lieu d'une chaîne:

oout.writeObject(new BigInteger(Line)); 
+0

Oh, je n'avait aucune idée qui l'affectait. La raison pour laquelle je faisais ça est que la chaîne est si longue qu'il faut environ une heure pour qu'elle soit convertie en BigInteger. Espérons que ce sera la dernière fois que je dois attendre, les doigts croisés –

+0

J'ai vu votre autre question. Bonne chance! Espérons que la lecture de la version binaire est beaucoup plus rapide. – Samuel

+0

Merci pour l'aide, je l'espère aussi puisque le nombre ne va que grossir d'ici –