PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Daten aus Datei einlesen und schreiben


BubbleBoy
2004-10-03, 23:32:49
Kann mir einer zwei Code-Schnipsel posten, mit dem ich zwei Zeilen in eine Textdatei schreiben und auch wieder auslesen kann? In der ersten Zeile steht ein Integer, in der Zweiten ein BigInteger.

HellHorse
2004-10-04, 09:17:42
Wo wär denn da der Lerneffekt?

http://java.sun.com/docs/books/tutorial/essential/io/filestreams.html
Zum Lesen der Zeilen erstellst du am besten einen BufferedReader (http://java.sun.com/j2se/1.5.0/docs/api/java/io/BufferedReader.html) um am einfachsten die Zeilen zu kommen.
Um aus einem String in einen Integer zu machen verwendest du Integer.parseInt(String) ("http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#parseInt(java.lang.String)), BigInteger bietet schon einen Konstruktor, der einen String akzeptiert.
Um einen BigInteger in einen String zu verwandeln wendest du darauf toString() an, ebenso macht Integer.toString ("http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#toString(int)) aus einem int einen String ("" + derInt geht narürlich auch).

BubbleBoy
2004-10-04, 17:41:14
Wo wär denn da der Lerneffekt?
Och, der wäre schon da (versuche ich doch i.A. zu verstehen, was ich sehe :cool:). Habe gestern immerhin über 2 Stunden an diesem "Problem" gesessen und mich an den schönsten Fehlermeldungen erfreut ;).

Ich probiere nachher noch etwas herum :rolleyes:.

BubbleBoy
2004-10-04, 19:42:18
Wie kann ich beim schreiben in eine Datei einen Zeilenumbruch erzeugen?


out.write(Integer.toString(i)); //<-danach neue Zeile beginnen
out.write(Zahl2.toString());

HellHorse
2004-10-04, 20:02:59
Im allgemeinen kann es bei Fragen zur Java API nie schaden, in der Doku nachzuschauen:
http://java.sun.com/j2se/1.5.0/docs/api/
Das Paket das dich hier interessiert ist java.io

quick and dirty, kann hauen, kann dich auch beissen

out.write('\n'); //ein newline ausgeben


besser

out.write(System.getProperty("line.separator")); // line separator nachschlagen und ausgeben


Falls out ein BufferedWriter ist (gleich gut wie Methode 2)

out.newLine();


Falls out ein PrintWriter ist (gleich gut wie Methode 2):

out.println();

BubbleBoy
2004-10-04, 21:29:25
Langsam habe ich den Dreh raus .... :) :ujump2:

Mühsam ernährt sich das Eichhörnchen.

BubbleBoy
2004-10-05, 13:51:07
Kann es sein, daß die Performance von BigInteger.toString() unterirdisch ist? :|

Mein Rechner (P3-650, 320MB RAM) ist nun schon 8 Stunden :crazy: dabei, einen ~3Mio. Stellen großen BigInteger in die Datei zu schreiben (bzw. entsprechend in einen String zu konvertieren).

Quelltextauszug:

PrintWriter out;
out = new PrintWriter(new FileWriter( inputFile ));

out.write(Integer.toString(i));
out.println();
out.write(Zahl2.toString()); //Zahl2 ist BigInteger mit ~3 Mio. Stellen

HellHorse
2004-10-05, 14:24:07
Kann es sein, daß die Performance von BigInteger.toString() unterirdisch ist? :|
Bei _grossen_ Zahlen: ja, aber das ist "normal".
Du kennst ja diesen Thread ;)
http://www.forum-3dcenter.org/vbulletin/showthread.php?t=152582&page=17&pp=20
einen ~3Mio. Stellen großen BigInteger in die Datei zu schreiben

Alles klar.

edit:
Falls du wirklich so grosse Zahlen brauchst und es nicht nur zum Spass gemacht hast, würde ich mal probieren, ob es nicht schneller ist, wenn du das Ding serialisierst und so auf die Platte schreibst.

BubbleBoy
2004-10-05, 15:01:26
Bei _grossen_ Zahlen: ja, aber das ist "normal".
Juhu ... Er ist jetzt nach 9 Stunden fertig geworden.


Du kennst ja diesen Thread ;)
http://www.forum-3dcenter.org/vbulletin/showthread.php?t=152582&page=17&pp=20
Hehe, genau darum geht es :D ...


Falls du wirklich so grosse Zahlen brauchst und es nicht nur zum Spass gemacht hast, würde ich mal probieren, ob es nicht schneller ist, wenn du das Ding serialisierst und so auf die Platte schreibst.
Und wieder was Neues :confused: ... (da bahnen sich ja schon die nächsten Fragen an ;))

Senior Sanchez
2004-10-05, 16:56:48
9 Stunden nur um nen BigInteger in nen String zu konvertieren??? Gib mal den Quelltext her, das will ich mal selbst sehen, weil das find ich doch etwas heftig (gut, mein rechner ist auch schneller, aber trotzdem 9 Stunden nur um den auszugegeben ist zu viel)
Oder haste bei den 9 Stunden noch die Berechnung drin? Naja, poste mal den Quelltext.


mfg Senior Sanchez

HellHorse
2004-10-05, 17:13:40
Juhu ... Er ist jetzt nach 9 Stunden fertig geworden.
Die finale Zahl hat so um die 300 Mio stellen. Du kannst es also mindestens mal 100 rechnen und schon haben wir über einen Monat :D

Und wieder was Neues :confused: ... (da bahnen sich ja schon die nächsten Fragen an ;))
Objekte in einen Bytestream schreiben und wieder daraus rekonstruieren. Den Bytestream kannst du kann auf die Festplatte schreiben oder über's Netz versenden (oder sonst was damit machen).

ausführlich und deutsch:
http://www.galileocomputing.de/openbook/javainsel3/javainsel_120012.htm#Rxxjavainsel_120012256PersistenteObjekteundSerialisierung
von google, kurz, bündig und englisch:
http://www.javacaps.com/java_serial.html
von Sun:
http://java.sun.com/j2se/1.3/docs/guide/serialization/

Senior Sanchez
2004-10-05, 17:17:55
HellHorse, hab keine lust diesen enden lange thread zu 9^9^9 durchzulesen..... könnteste mir mal kurz umreißen um was es geht? will mich vllt mal selbst daran versuchen ;)


mfg Senior Sanchez

BubbleBoy
2004-10-05, 19:07:10
Die finale Zahl hat so um die 300 Mio stellen.
Weiß ich doch ...

Muß mal sehen, wann ich die Zeit habe damit weiter zu machen.

BubbleBoy
2004-10-05, 19:10:19
HellHorse, hab keine lust diesen enden lange thread zu 9^9^9 durchzulesen..... könnteste mir mal kurz umreißen um was es geht? will mich vllt mal selbst daran versuchen ;)
Es geht einfach nur darum, 9^9^9 zu berechnen (dezimal!) - wie oben schon geschrieben eine Zahl mit ~300 Mio. Stellen.

Hast du dir den Quelltext mal angeschaut?

Senior Sanchez
2004-10-05, 19:12:33
danke für die private nachricht. kann aber etwas dauern das durchzuguggen und mal nen bissl daran zu bauen (vllt implementiere ich es aber auch vollkommen selber, muss ich mal sehen), da ich im mom auch net soooo die zeit habe.


mfg Senior Sanchez

BubbleBoy
2004-11-08, 19:42:50
So, ich bin es wieder. :wave2:

Java bricht bei der Konvertierung eines rund 10Mio. Stellen großen BigInteger in einen String irgendwann mit der (sinngemäßen) Meldung "zu wenig Heap-Speicher" ab. Wie kann man das umgehen (schließlich möchte ich zum Schluß ~300Mio. Stellen speichern)?

HellHorse
2004-11-08, 21:49:19
Die maximale Heapgrösse vergrössern. :) Ist ein zusätzlich es Argument für java.

-Xmx512m

Oder entsprechend mehr.

java -X

Zeigt dir an, was es sonst noch so gibt.

BubbleBoy
2004-11-08, 21:54:20
Die maximale Heapgrösse vergrössern. :)
;D

Welche Größe ist denn Standard?