Det hurtigste er RandomAccessFile i java.io pakken: File file = new File("C:/tekst.txt"); RandomAccessFile raf = new RandomAccessFile(file, "r"); if( raf.length() > Integer.MAX_VALUE ) // Fil for stor byte[] result = new byte[ (int) raf.length() ]; raf.read( result ); raf.close();
jjust >> available(...) på en stream returnerer ikke hvor meget der er i streamen, men hvor meget du på nuværende tidspunkt kan læse! Filen kan godt være væsentligt større jo.
En String er jo essentielt bare et byte array med noget abstraktion ovenpå. Du er jo nødt til at kopiere indholdet over i strengen, når du ikke har pointere.
Hvis du skal bruge filen meget kan du med nio mappe den direkte i memory og tilgå den derfra.
Med nedenstående test tager det lidt længere tid at læse filen ind i en streng hvis du bruger nio, men du kan til gengæld læse væsentligt hurtigere fra den når den endelig er inde.
Har en gang kunnet lidt Java, men dengang hed det vist Java 1.0 *G* Men jeg har jo lavet noget kode i C#, og jeg er ret sikker på at det (bortset fra fil-operationer) forholdsvis let kan oversættes til Java.
Synes godt om
Slettet bruger
12. marts 2003 - 17:31#16
viht >> Du har ret mht. available.
Har du et godt argument for at RandomAccessFile er hurtigere end at bruge en FileInputStream? Jeg har prøvet med nedenstående program, og får væsentlige bedre tider for FileInputStream.
import java.io.*;
public class filetest { public static void main(String[] args) { try { long start = System.currentTimeMillis(); File f = new File("color.txt"); byte[] buffer = new byte[(int) f.length()]; FileInputStream fis = new FileInputStream(f); fis.read(buffer); String str = new String(buffer); long end = System.currentTimeMillis(); fis.close(); System.out.println(end-start); } catch(Exception e) { e.printStackTrace(); }
try { long start = System.currentTimeMillis(); RandomAccessFile raf = new RandomAccessFile("color.txt", "r"); byte[] buffer = new byte[(int) raf.length()]; raf.readFully(buffer); String str = new String(buffer); long end = System.currentTimeMillis(); raf.close(); System.out.println(end-start); } catch(Exception e) { e.printStackTrace(); } } }
da jeg timede det hele uden at køre det i en løkke, fik jeg ca. 31 ms med FIS og 16 ms med RAF.
Synes godt om
Slettet bruger
12. marts 2003 - 21:02#25
Jeg brugte det program jeg skrev her! Ser lige på det senere igen. Det lyder lidt spøjst!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.