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
Pathimmutable útvonal-objektum, amelyhez könnyebb compose-olni és normalizálni az útvonalakat. - A
Filesutility 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,clearmű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+Filesa 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,existshívások tisztábbak, mint sok régiFile-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 buffertflip()-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:put→flip→get.- 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