Frage von Eltr0n, 50

Android/Java alternative zu BigInteger.toString()?

Mein Problem ist das ich eine relativ lange BigInteger Zahl(ca.20.000.00 Stellen) aus meinem Java Code auf das Android Gerät speichern möchte. 

Das Problem dabei: Mir ist nicht bekannt ob man eine BigInteger Zahl direkt als Datei speichern kann. Aus diesem Grund, muss ich die Zahl zuerst in einen String umwandeln und diesen dann speichern.

Hier ist auch leider das Problem. Um zB. eine BigInteger Zahl von der länge von 100.000 Stellen in einen String zu konvertieren dauert ungefähr 280 Sekunden. Leider ist das für mich deutlich zu langsam.

Nun zu meinen Fragen:

 1. Ist es möglich einen BigInteger direkt zu speichern ohne ihn konvertieren zu müssen oder irgendwie anders abzuspeichern?

2.Gibt es eine Library die einem ermöglicht schnell solch einen BigInteger in einem String umzuwandeln oder zu speichern?

Ich hoffe jemand kann mir dabei weiterhelfen und danke für das lesen des Textes.

Eltr0n

Antwort
von TeufelKommRaus, 29

BigInteger implementieren das Serializable Interface. Du kannst jedes Objekt, dass dieses Interface implementiert auf einen ObjectOutputStream schreiben. Mit diesem Kannst du einen FileWriter benutzen um in eine Datei zu schreiben.
Wie schnell das geht weiß ich auch nicht, jedoch deutlich schneller als 280 Sekunden alle mal denke ich. 

Kommentar von Eltr0n ,

Vielen dank für die schnelle Antwort! Kannst du mir zufällig auch noch sagen wir ich den BigInteger in den ObjectOutputStream schreibe? Würde mir sehr weiterhelfen :)

Kommentar von TeufelKommRaus ,

Kein Problem. 
Hier ein bisschen Beispielcode:

BigInteger i  = new BitInteger(); // Damit machst du nun irgendwas, das daten reinkommen. 

FileOutputStream f = new FileOutputStream(url_zu_datei); // Schreibt in einen Datei.
ObjectOutputstream out = new ObjectOutputStream(f ); // verpackt Objekte so, dass sie in den fileOutputStream geschrieben werden.

out.wirteObject(i); // hier schreibt du deinen BitInteger. 

und wenn du das ganz wieder lesen willst, nutzt du einfach einen objectInputSteram. 

Dazu gibts auch haufenweise Tutorials im internet & die API ist auch sehr aufschlussreich. Einfach ein wenig Googeln :P

Kommentar von Eltr0n ,

Wow danke. Das ist genau was ich gesucht habe.😀 Schön das du es mir so einfach und verständlich erklärt hast. Habe heute bestimmt den ganzen Tag danach gesucht wärend du mir in 10Minuten hilfst. Eltr0n

Kommentar von TeufelKommRaus ,

Immer gern :)

Keine passende Antwort gefunden?

Fragen Sie die Community