PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei öffnen,speichern.... - aber auch effizient ?



maceop
31-01-2003, 16:34
hi,
ich hab mich mal gefragt wie effizient die Methoden sind, die ich bisher zum Öffnen und Speichern von Dateien verwendet habe. Bisher habe ich das ganze über File,FileReader und nen StringBuffer gemacht.

Hier ein Auszug (öffnen von datei):

File datei = new File(data);
FileReader freader = new FileReader(datei);

boolean weiter = true;

while(weiter)
{
gelesen = freader.read();

if(gelesen == -1)
{
weiter = false;
continue;
}

lesepuffer.append((char)gelesen);
}


vor kurzem habe ich aber gelesen das dies nicht sehr effizient ist, kennt ihr andere Methoden die besser sind (schneller und wenn möglich nicht sehr "speicher-aufbrauchend"), kann mir dann vielleicht auch jemand erklären warum oben die Methode "ineffizent" ist und warum die andere(n) besser sind ?

mfg
maceop

anda_skoa
31-01-2003, 17:41
Mit einem BufferedReader kannst du ganze Zeilen mit der Methode readLine() lesen.

Ciao,
_

maceop
31-01-2003, 17:52
ok danke, ich hab da mal was von FileInputStream und von CustomBuffering gelesen, das die "angeblich" schneller sein sollen, stimmt das ?

ReSeT
31-01-2003, 17:55
Hallo!

Leider kenn ich das Verfahren nicht, welches Du hier aufführst, kann daher auch nichts über seine Effizienz aussagen. Üblicherweise werden Dateien über Streams gelesen und geschrieben.

Dies geschieht unter C++ z.B. mithilfe von ifstream ofstream und fstream, wobei hier noch verschiedene Öffnungsarten mit übergeben werden müssen, die der Art der zu lesenden Daten ensprechen.

Die Effizienz hängt sicherlich stark von der Art der Daten, die gelesen und geschrieben werden sollen, ab, das kann man gar nicht so pauschalisieren. Wenn ich beispielsweise eine bestimmte Information aus einer Datei haben möchte und weiß, an welcher Stelle diese liegt, ist es sicherlich effizienter, diese Mithilfe von entprechenden Funktionen (ifstream.gseek) direkt anzuspringen, als die gesamte Datei einzulesen und die Information dann aus dem Speicher zu holen.

Bei Textdateien ist es sicher auch interpretationsabhängig und davon abhängig, was ich hinterher mit den Daten überhaupt anstellen will. (Ein Texteditor hat sicherlich andere Anforderungen, als ein Programm, was die Zeilen zählt).

Na,ja ich hoffe die Antwort war jetzt nicht am Thema vorbei, aber mehr weiss ich jetzt auch nicht.

:D

maceop
31-01-2003, 18:04
danke, es geht primär um das lesen von regulären dateien , also normalen textdateien. meistens wird lediglich die ganze datei ausgelesen, sonst nichts.

es sollte in java gelöst werden.

anda_skoa
31-01-2003, 18:29
Es ist womöglich schneller, wenn man mit einem großen Puffer arbeitet.
Aber ich denke readLine ist am bequemsten und der zusätzlich Aufwand für Custom Buffering lohnt sich in dem Fall glaub ich nicht.

Ciao,
_

Sion
22-02-2003, 19:10
Wenn du auf die meisten (oder alle) Elemente einer Datei zugreifen willst, und diese in den Arbeitsspeicher paßt, sollte das Öffnen per memory mapped (mmap) am schnellsten sein...
Mehr dazu auf pronix (http://www.pronix.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel9.shtml#9_1 )

maceop
23-02-2003, 09:33
danke, nur es sollte eben in Java gelöst werden, nicht in C.

Sion
23-02-2003, 14:55
Original geschrieben von maceop
danke, nur es sollte eben in Java gelöst werden, nicht in C.
Achso, das kam bei den ersten Postings nicht so ganz raus, die restlichen habe ich nur überflogen (jaja, da steht was von Java...). In C++ kann man das natürlich auch anwenden, aber halt nicht in Java. Aber Java hat ja sowieso nicht so sehr viel mit Performance zu tun :D
Gruß