Középhaladó Olvasási idő: ~4 perc

NIO (java.nio)

Files API, Path, Buffers és Channels

NIO (java.nio)

A NIO modernebb fájl- és puffer API-t ad, jobb composabilityvel és gyakran kényelmesebb fájlműveletekkel.

1. Definíció

A java.nio és főleg a java.nio.file modern alternatívát ad a klasszikus I/O fölé: Path, Files, buffer és channel alapú modellel. Interjún azt várják, hogy lásd, miben kényelmesebb és mikor praktikusabb, mint a régi java.io API. A téma érinti a fájlrendszer-műveleteket, pufferkezelést és nagyobb teljesítményű I/O mintákat. A Files API a mindennapi kódban különösen gyakori.

2. Alapfogalmak

Fogalom Jelentés Miért fontos
Path Fájlrendszerút absztrakció A régi File modernebb alternatívája.
Files Statikus utility fájlműveletekhez Olvasás, írás, másolás, létezés, attribútumok.
ByteBuffer Memóriapuffer bájtok kezelésére Position/limit/capacity modellje van.
Channel I/O csatorna adatmozgatásra Bufferrel együtt használják.
NIO.2 A Java 7-től bejött file API Watcher és attribútum támogatást is hozott.
  • A Path immutable útvonal-objektum, amelyhez könnyebb compose-olni és normalizálni az útvonalakat.
  • A Files utility sok egyszerű feladatot egyetlen hívással megold, például teljes fájl olvasást vagy írást.
  • A ByteBuffer állapotgép-szerűen működik: put, flip, get, clear műveletek váltják egymást.
  • A channel és buffer modell explicitabb, mint a stream API, de több kontrollt és sok esetben jobb teljesítményt ad.

3. Gyakorlati használat

A(z) NIO (java.nio) témában a legfontosabb gyakorlati kérdés mindig az, hogy milyen use-case-re választasz eszközt. A jó interjúválasz itt nem csak azt mondja meg, mit lehet csinálni, hanem azt is, mikor érdemes és mikor nem.

  • Új kódban fájlműveletekhez általában Path + Files a default választás.
  • Ha nagy fájlt vagy alacsonyabb szintű adatmozgatást kezelsz, a buffer és channel modell hasznos lehet.
  • A Files.readString, writeString, copy, move, exists hívások tisztábbak, mint sok régi File-os megoldás.
  • Interjún említsd meg, hogy a NIO nem csak “non-blocking”-ot jelent; a hétköznapi Java fejlesztésben a file API része a leggyakoribb.

4. Kód példák

Egyszerű példa

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class FilesApiExample {
    public static void main(String[] args) throws IOException {
        Path path = Path.of("notes.txt");
        Files.writeString(path, "hello nio");
        String content = Files.readString(path);
        System.out.println(content);
    }
}

Haladó példa

import java.nio.ByteBuffer;

public class BufferExample {
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(16);
        buffer.put((byte) 10);
        buffer.put((byte) 20);

        buffer.flip();
        while (buffer.hasRemaining()) {
            System.out.println(buffer.get());
        }
    }
}

A kódpéldák interjún azért hasznosak, mert megmutatják, hogy a fogalmi szintű tudást le tudod fordítani konkrét API-használatra. Ha röviden el tudod magyarázni, miért így írod a példát, az általában többet ér, mint egy túlbonyolított demo.

5. Trade-offok

Szempont Előny Hátrány
Files API Rövid és olvasható fájlműveletek Nagy fájloknál a teljes beolvasás nem mindig jó ötlet
Buffer + channel Több kontroll és gyakran jobb teljesítmény Meredekebb tanulási görbe
Path Tisztább útvonal-kezelés Régi API-kkal néha konvertálni kell

6. Gyakori hibák

  • Rossz: A Files.readString-et gondolkodás nélkül használod nagyon nagy fájlra. ✅ Helyes: Nagy fájlhoz streamelő vagy chunkolt megoldást válassz.
  • Rossz: Buffer használatnál elfelejted a flip() hívást. ✅ Helyes: Írás után olvasás előtt állítsd át a buffert flip()-pel.
  • Rossz: Azt hiszed, NIO csak hálózati non-blocking programozásra való. ✅ Helyes: A modern file API legalább ilyen fontos része a csomagnak.

7. Senior szintű meglátások

Senior szinten a NIO értéke a jobb absztrakció és a kontroll kombinációja. Nem minden feladathoz kell buffer és channel, de jó tudni, mikor lépsz lejjebb a Files kényelmi szintről.

Follow-up interjúkérdés: mi a ByteBuffer position, limit és capacity jelentése? Ezek megértése mutatja, hogy tényleg használtad-e a modellt.

A jó választás itt is use-case alapú: kis konfigurációs fájlhoz Files.readString, nagy adatfolyamhoz bufferelt vagy channeles megoldás.

Tipikus follow-up interjúkérdések:

  • Hogyan magyaráznád el röviden a(z) NIO (java.nio) témát egy junior fejlesztőnek?
  • Milyen trade-offot látsz a(z) NIO (java.nio) kapcsán valós projektben?
  • Milyen tipikus production hibát tudsz ehhez a témához kötni?

Senior gyakorlatban a NIO értéke abban is megjelenik, hogy egységesebben kezeli a fájlrendszerrel kapcsolatos edge case-eket. A Path normalizálás, az attribútumok lekérdezése, a másolás vagy mozgatás opciói, illetve a buffer állapotgép pontos kezelése mind olyan részlet, ami production környezetben megbízhatóbbá teszi a fájlműveleteket.

8. Szószedet

Kifejezés Jelentés
path Modern fájlrendszerút reprezentáció.
files api Statikus utility műveletek a Files osztályban.
bytebuffer Állapottal rendelkező bájtpuffer.
channel I/O csatorna, ami bufferrel együtt működik.
flip A buffer írási módról olvasási módra váltása.

9. Gyorsreferencia

  • Új fájlművelethez default: Path + Files.
  • Kis szövegfájl: Files.readString/writeString.
  • Nagy adatfolyam: buffer/channel megfontolandó.
  • ByteBuffer: putflipget.
  • NIO nem csak non-blocking hálózat.

Ha interjún elakadsz, a(z) NIO (java.nio) témánál mindig térj vissza a három alapelvhez: pontos definíció, tipikus use-case, és a legfontosabb trade-off vagy hiba.

🎮 Játékok

8 kérdés