Szybki dostęp do dowolnej linii w pliku

0

Witam,
mam macierze double[][] zapisane w tabulowanym pliku txt. Chce randomowo dobierać sie do danego wiersza. O ile w przypadku zapisu bajtowego do pliku wynik czasowy jest dopuszczalny to w przypadku txt bardzo słaby.

Robie tak:

        int row = 12345;
        double row_[]=new double[cols];
        try {
            BufferedReader in = new BufferedReader(new FileReader(filename));
            String str;
            StringTokenizer strings;
            for(int i=0; i<row; i++) //to jest do przeskakiwania linii
                in.readLine();
            str = in.readLine();
            strings = new StringTokenizer(str,"\t");
            for(int i=0; i<cols; i++)
                row_[i]=Double.parseDouble(strings.nextToken());
            in.close();
       } catch (IOException e) {e.printStackTrace();
       }

Da sie to zrobić szybciej? jakimś skipem może?

O ile bajtowo wynik jest 100tys randomów w ~10s to w txt 1tys randowów w ~5s.

0

Nadal można zastosować dostęp bajtowy. Wczytaj Całość jako strumień. Następnie zamień na String. Potem zamień na tablicę dzieląc po znaku \r w ten sposób masz już tablicę z poszczególnymi liniami. Dostęp o złożoności O(1). Tyle tylko, że trzeba wczytać plik i zamienić go na linie.

0

No ok, a jak plik >1GB zajmuje? :-)

0

To zrob sobie osobny plik indeksujacy, w ktorym zapisane sa numery linii i pozycja ich poczatku w pliku. Wtedy wczytujesz indeks i odczytujesz linie przeskakujac odpowiednia ilosc bajtow w pliku.

0

Dobre:) sprawdze to:)

0
cjtomekk napisał(a)

No ok, a jak plik >1GB zajmuje? :-)

To pomyśl nad wykorzystaniem bazy danych ;-)

pzdr,

0

wykorzystuje ;-) to ma byc jedna z alternatyw :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1