Jelenlegi hely

20.3. Közvetlen elérésű állományok

Az ki és bemenő adatfolyamok eddig a leckéig soros hozzáférésűek voltak, melyek írása és olvasása az elejétől a végéig sorban történik. Bár az ilyen adatfolyamok hihetetlenül hasznosak, de ezek csak a soros hozzáférésű médiumok (papír és mágnesszalag) következtében jöttek létre. Másrészről a közvetlen hozzáférésű fájlok, nem-soros, hanem véletlenszerű (közvetlen) hozzáférést biztosítanak a fájl tartalmához.

Tehát miért van szükség közvetlen elérésű fájlokra? Gondoljunk csak a tömörített ZIP formátumra. A ZIP állományok fájlokat tartalmaznak, tömörítve a helytakarékosság miatt. A ZIP állományok tartalmaznak egy az állomány végén elhelyezett dir bejegyzést, mely megmutatja, hogy a különböző fájlok hol találhatók a ZIP belsejében.

Fájlszerkezet

Feltéve, hogy egy meghatározott fájlt akarunk kicsomagolni a ZIP-ből, soros hozzáférés esetén a következőket kell tennünk:

  • Megnyitjuk a ZIP fájlt
  • Végigkeressük a ZIP fájlt a keresett állományért
  • Kicsomagoljuk az állományt
  • Bezárjuk a ZIP-et

Ezt az algoritmust használva, átlagban legalább a ZIP állomány felét végig kell olvasni a keresett állományért. Kitömöríthetjük ugyanezt a fájlt a ZIP-ből sokkal hatékonyabban, ha a közvetlen elérésű fájl seek, azaz keresési funkcióját használjuk a következő lépések szerint:

  • Megnyitjuk a ZIP fájlt
  • Megkeressük a dir bejegyzést és azon belül a kitömörítendő fájl helyét
  • Megkeressük (visszafelé) a fájl pozícióját a ZIP-en belül
  • Kicsomagoljuk az állományt
  • Bezárjuk a ZIP-et

Ez a módszer sokkal hatékonyabb, mert csak a dir bejegyzést és kicsomagolandó fájlt kell beolvasni. A java.io csomagban található RandomAccessFile osztály implementálja közvetlen elérésű fájlokat.