์ถ์ฒ
ChatGPT
https://velog.io/@mmy789/Java-NIO-3
๋ฒํผ๋? Buffer
๋ฒํผ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค. ์ฃผ๋ก ์ ์ถ๋ ฅ (I/O) ์์ ์์ ์ฌ์ฉ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ํ๊บผ๋ฒ์ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ์ ๊ฐ์ ํ๋ค.
๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์ด์
1. ์ ์ถ๋ ฅ ์ฑ๋ฅ ํฅ์
์ ์ถ๋ ฅ ์ฅ์น๋ ์ผ๋ฐ์ ์ผ๋ก CPU๋ณด๋ค ์๋๊ฐ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ ์กํ๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฒํผ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ๋ ๋ชจ์ ํ ๋ฒ์ ์ ์ํจ์ผ๋ก์จ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํจ๋ค.
CPU์ ์ ์ถ๋ ฅ ๊ธฐ๊ธฐ์ ์๋ ์ฐจ์ด
- CPU๋ ์ด๋น ์์ญ์ต ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ณ ์ ์ฅ์น์ด๋ค.
- ์ ๋ ฅ์ถ ๊ธฐ๊ธฐ๋ ์๋์ ์ผ๋ก ๋๋ฆฐ ์ฅ์น์ด๋ค. ์๋ฅผ ๋ค์ด, ํ๋๋์คํฌ๋ ๋ฌผ๋ฆฌ์ ์ธ ํ์ ๊ณผ ํค๋ ์ด๋์ด ํ์ํ๋ฉฐ, ๋คํธ์ํฌ ํต์ ์ ๋๊ธฐ ์๊ฐ์ด ๋ฐ์ํ ์ ์๋ค.
- ์ด๋ฌํ ์๋ ์ฐจ์ด ๋๋ฌธ์ CPU๊ฐ ์ ์ถ๋ ฅ ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ฉ์ถ๊ฒ ๋๋ฉด ์ ์ฒด ์์คํ ์ ์ฑ๋ฅ์ด ์ ํ๋๋ค. ์ด๋ I/O ๋ณ๋ชฉ ํ์์ด๋ผ๊ณ ํ๋ค.
๋ฒํผ์ ์ญํ
๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๊ณ , ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํด CPU์ ์ ์ถ๋ ฅ ๊ธฐ๊ธฐ ๊ฐ์ ์๋ ์ฐจ์ด๋ฅผ ์ํํ๋ค.
1. ์ฐ๊ธฐ ์์
- CPU๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ๊ณ , ๋ฒํผ์ ์ ์ฅํ๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ถ๋ ฅ ๊ธฐ๊ธฐ๊ฐ ์ฌ์ ๊ฐ ์์ ๋ ์ฒ์ฒํ ๊ฐ์ ธ๊ฐ๋๋ก ํด์ ์ ์ถ๋ ฅ ๊ธฐ๊ธฐ์ ๋๋ฆฐ ์๋๋ก ์ธํด CPU๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ํ์์ ์ค์ธ๋ค.
- ์๋ฅผ ๋ค์ด, ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ธ ๋, CPU๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์ ๋จผ์ ์ ์ฅํ๊ณ , ์ดํ์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋์คํฌ์ ๊ธฐ๋กํ๋ค. ์ด๋ฅผ ํตํด ์์ ๋ฐ์ดํฐ ๋จ์๋ก ์ฌ๋ฌ ๋ฒ ๋์คํฌ์ ๊ธฐ๋กํ๋ ๊ฒ๋ณด๋ค ๋ ํจ์จ์ ์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
2. ์ฝ๊ธฐ ์์
- ์ ์ถ๋ ฅ ๊ธฐ๊ธฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์ ์ ์ฅํด ๋์ผ๋ฉด, CPU๋ ๋ฒํผ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฝ์ด ์ฌ ์ ์๋ค. ์ ์ถ๋ ฅ ๊ธฐ๊ธฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๋์ CPU๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์, CPU์ ๋๊ธฐ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
- ์๋ฅผ ๋ค์. ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋, ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํฌ๊ธฐ๋ก ํ ๋ฒ์ ๋ฒํผ์ ์ฝ์ด ๋๊ณ , ๊ทธ ๋ฒํผ์์ CPU๊ฐ ํ์ํ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๋ฐฉ์์ผ๋ก ์์ ์ ์ํํ๋ค. ์ด๋ฅผ ํตํด ๋์คํฌ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฝ์ด์ค ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ , ์ ์ฒด์ ์ธ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ผ ์ ์๋ค.
2. ์์คํ ํธ์ถ ์ต์ํ
๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉด ์์คํ ํธ์ถ์ ํ์๋ฅผ ์ค์ผ ์ ์๋ค. ์ ์ถ๋ ฅ ์์ ์ ์์คํ ํธ์ถ์ด ๋ง์ด ๋ฐ์ํ๋ ์์ ์ค ํ๋์ธ๋ฐ, ์์คํ ํธ์ถ์ด ๋น๋ฒํ๋ฉด CPU ์ฑ๋ฅ์ ๋ถ๋ด์ ์ค ์ ์๋ค. ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์คํ ํธ์ถ์ ์ค์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ค.
๐ค ์ ์ ์ถ๋ ฅ ์์ ์ด ๋น๋ฒํ๋ฉด CPU ์ฑ๋ฅ์ ๋ถ๋ด์ด ๋ ๊น
์์คํ ํธ์ถ์ด๋
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ด์ ์ฒด์ ์ ์ปค๋(kernel)์ ์ง์ ์ ์ธ ์ ๊ทผ์ ์์ฒญํ๋ ๋ฐฉ๋ฒ. ํ๋ก๊ทธ๋จ์ด ์ผ๋ฐ์ ์ธ ์ฐ์ฐ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ํ ๋๋ ์ฌ์ฉ์ ๊ณต๊ฐ(user space)์์ ์คํ๋์ง๋ง, ํ์ผ์ ์ด๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ์ ์ด์ ์ฒด์ ์ ์ปค๋ ์์ญ( kernel space)์์ ๊ด๋ฆฌํด์ผ ํ๋ค. ์ด๋, ํ๋ก๊ทธ๋จ์ ์ด์ ์ฒด์ ์ ์์คํ ํธ์ถ์ ํตํด ์ด๋ฌํ ์์ ์ ์์ฒญํ๊ฒ ๋๋ค.
์ ์ถ๋ ฅ ์์ ๊ณผ ์์คํ ํธ์ถ
์ ์ถ๋ ฅ ์์ (I/O)์ ์ฃผ๋ก ํ์ผ ์์คํ ์ ์ ๊ทผํ๊ฑฐ๋ ๋คํธ์ํฌ ์ฅ์น์ ํต์ ํ๋ ์์ ์ด๋ค. ์ด๋ฐ ์์ ๋ค์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ง์ ํ๋์จ์ด์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก, ์ด์ ์ฒด์ ์ ๋์์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ์์คํ ํธ์ถ์ ํตํด ์ด์ ์ฒด์ ์๊ฒ ์์ฒญํ๋ค.
์์คํ ํธ์ถ์ด ๋น๋ฒํ๋ฉด CPU์ ๋ถ๋ด์ด ๋๋ ์ด์
1. ์ฌ์ฉ์ ๋ชจ๋์ ์ปค๋ ๋ชจ๋ ๊ฐ์ ์ ํ ๋น์ฉ
- ์์คํ ํธ์ถ์ด ๋ฐ์ํ๋ฉด ์ฌ์ฉ์ ๋ชจ๋(user mode)์์ ์ปค๋ ๋ชจ๋(kernel mode)๋ก ์ ํ์ด ์ด๋ค์ง๋ค. ์ฌ์ฉ์ ๋ชจ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์์ญ์ด๊ณ , ์ปค๋ ๋ชจ๋๋ ์ด์ ์ฒด์ ๊ฐ ์คํ๋๋ ์์ญ์ด๋ค.
- ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก์ ์ ํ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ ์์ ์ด๋ค. ์ด๋ CPU๊ฐ ์์ ใ ๋ฅด ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ปจํ ์คํธ ์ ํ์ ํ๋ฉฐ, ๊ฐ์ข ๋ณด์ ๊ฒ์ฌ์ ํ๋ก์ธ์ค ์ํ ์ ์ฅ ๋ฐ ๋ณต์์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ์ถ๋ ฅ ์์ ์ด ๋ง์์ง์๋ก ์ด ๋ชจ๋ ์ ํ์ด ์์ฃผ ๋ฐ์ํ์ฌ, CPU๋ ์๋์ ์์ ์ ์ฒ๋ฆฌํ๋ ๋์ ๋ชจ๋ ์ ํ๊ณผ ๊ด๋ จ๋ ์์ ์ ๋ ๋ง์ ์๊ฐ์ ์๋นํ๊ฒ ๋๋ค.
2. ๋ธ๋กํน I/O์ ๋๊ธฐ ์๊ฐ
- ๋ง์ ์ ์ถ๋ ฅ ์์ ์ ๋ธ๋กํน I/O๋ก ์ฒ๋ฆฌ๋๋ค. ์ด๋ ์์ฒญ๋ ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ๋ก ์ ํ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
3. CPU ์บ์ ํจ์จ ๊ฐ์
- CPU ์บ์๋ ์์ฃผ ์ ๊ทผํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์์ผ๋ก ์ ์ฅํด ๋๋ ๊ณต๊ฐ์ด๋ค. ์์คํ ํธ์ถ๋ก ์ธํด ์ฌ์ฉ์ ๋ชจ๋์ ์ปค๋ ๋ชจ๋ ๊ฐ์ ์ ํ์ด ์์ฃผ ๋ฐ์ํ๋ฉด, CPU ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌดํจํ๋์ด ์บ์ ๋ฏธ์ค(cache miss)๊ฐ ์ฆ๊ฐํ ์ ์๋ค. ์ด๋ CPU๊ฐ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์์ ์ฐพ์ง ๋ชปํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ก ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๋ค.
๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉด
- ๋ฐฐ์น ์ฒ๋ฆฌ(Batch Processing)์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ๋ชจ์์ ํ๊บผ๋ฒ์ ์ ์ถ๋ ฅ ์์ ์ ์ํํ๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ, ๊ฐ ๋ฐ์ดํฐ ๋จ์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํ ๋๋ณด๋ค ์์คํ ํธ์ถ์ ๋น๋๋ฅผ ์ค์ด๊ณ , ์ ์ถ๋ ฅ ์์ ์ ํจ์จ์ ๋์ผ ์ ์๋ค.
- ๋ธ๋กํน ์๊ฐ์ด ๊ฐ์๋๋ค. ๋ฒ ํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์๋๊ณ ํ์ํ ๋ ์ฒ๋ฆฌํ๋ฏ๋ก, CPU๊ฐ ์ ์ถ๋ ฅ ์์ ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ผ๋ก ์ํํ ์ ์์ด, ๋ธ๋กํน ์๊ฐ์ด ์ค์ด๋ ๋ค. ์ด๋ฅผ ํตํด ์ ์ฒด ์์คํ ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ด๋ค์ง๋ค. ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉด, ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ์ง ์๊ณ CPU๊ฐ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๊ฒ ๋์ด ๋น๋๊ธฐ์ ์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ CPU๊ฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋์ด ์์คํ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
3. ๋ฐ์ดํฐ ์ ์ก ํจ์จ์ฑ
๋ฒํผ๋ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํด ์ ์ถ๋ ฅ ์ฅ์น์์ ๋น๋๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๊ฐ ๋น ๋ฅด๊ฒ ์์ฑ๋๋๋ผ๋ ๋ฒํผ๊ฐ ๋จผ์ ์ ์ฅํ๊ณ , ์ดํ ์ถ๋ ฅ ์คํธ๋ฆผ์ ํตํด ์ฐจ๋ก๋๋ก ๋ชฉ์ ์ง์ ์ ์กํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ ์์ฑ ์๋์ ๋ฐ์ดํฐ ์ ์ก ์๋์ ์ฐจ์ด๋ฅผ ์ํธํ ์ ์๋ค.
๋ฒํผ์ ์ข ๋ฅ
1. ๋ค์ด๋ ํธ ๋ฒํผ Direct Buffer
์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด์ฉํ๋ค.
I/O ์์ ์์ ๋ค์ดํฐ๋ธ ์ฝ๋์ ์ํธ์์ฉํ ๋ ์ฑ๋ฅ ์ด์ ์ด ์๋ค. JVM์ด ๋ค์ดํฐ๋ธ ์ฝ๋์ ์ ๊ทผํ ๋ ์ค๊ฐ ๋ณต์ฌ ๊ณผ์ ์ ์๋ตํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์์ฒด์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ธฐ ์ํด ์ด์์ฒด์ ๋ฅผ ํธ์ถํ๋ฏ๋ก ์๋์ ์ผ๋ก ๋ฒํผ ์์ฑ์ด ๋๋ฆฌ๋ค. ๊ทธ๋์ ์์ฃผ ์์ฑํ๊ธฐ ๋ณด๋ค ํ ๋ฒ ์์ฑํด์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํ๋ค.
์ด์์ฒด์ ๊ฐ ํ์ฉํ๋ ๋ฒ์ ๋ด์์ ๋์ฉ๋ ๋ฒํผ๋ฅผ ์์ฑ์ํฌ ์ ์๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ๊ด๋ฆฌ๋์ง ์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ํด์ ๋์ง ์๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ชปํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋คํธ์ํฌ ํต์ ๋๋ ํ์ผ I/O์์ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
2. ๋ ผ๋ค์ด๋ ํธ ๋ฒํผ Non-Direct Buffer
JVM์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด์ฉํ๋ค. ์์ ๋ฐ์ดํฐ๋ ๋น๋ฒํ ํ ๋น/ํด์ ๊ฐ ํ์ํ ์์ ์์ ํจ์จ์ ์ด๋ค.
๋ค์ดํฐ๋ธ I/O ์์ ์์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๋ฐ์ดํฐ ๋ณต์ฌ๊ฐ ํ์ํ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
๋ค์ด๋ ํธ ๋ฒํผ์ ๋นํ๋ฉด ๋ฒํผ ์์ฑ ์๊ฐ์ด ๋น ๋ฅด๋ค.
JVM์ ์ ํ๋ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ฒํผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ก์ ์ ์๋ค.
๊ฐ๋ฐ์ง ์ปฌ๋ ํฐ์ ์ํด ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ค.
๋ฒํผ๋ง์ด๋ Buffering
๋ฒํผ๋ง์ ์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ๋ชจ์๋๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ์กํ๊ฑฐ๋ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ชจ์์ ์ฒ๋ฆฌํจ์ผ๋ก์จ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ํฅ์์ํจ๋ค.
๋ฒํผ๋ง์ ํตํด ์์คํ ํธ์ถ ํ์๋ฅผ ์ค์ผ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฅผ ํ ๋ฐ์ดํธ์ฉ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋์ , ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ํ ๋ฒ์ ์ ์กํจ์ผ๋ก์จ ์์คํ ํธ์ถ์ ์ต์ํํ๋ค.
๋ฒํผ ๊ด๋ จ ํด๋์ค
BufferedInputStream / BufferedOuputStream
๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ํ ๋ฒํผ๋ง ํด๋์ค. InputStream์ด๋ OutputStream ๊ฐ์ฒด์ ๋ฒํผ๋ง ๊ธฐ๋ฅ์ ์ถ๊ฐํด ๋ ํฐ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ํ ๋ฒ์ ์ฝ๊ณ ์ด๋ค.
BufferedReader / BufferdWriter
๋ฌธ์ ์คํธ๋ฆผ์ ์ํ ๋ฒํผ๋ง ํด๋์ค์ด๋ค. ํ์ผ์ ์ค ๋จ์๋ก ์ฝ๊ฑฐ๋ ์ธ ๋ ์ ์ฉํ๋ฉฐ, readLine() ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด ํ ์คํธ ํ์ผ์ ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
ByteButter(in java.nio.package)
java.nio(New I/O) ํจํค์ง์ ๋ฒํผ ํด๋์ค์ด๋ค. ButeBuffer๋ ๋ฒํผ์ ์ง์ ์ ๊ทผํด ๋ฐ์ดํฐ์ ์ฝ๊ณ ์ธ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. nio ๋ฒํผ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ฑ๋์ ํตํด ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
๋ฒํผ ์ฌ์ด์ฆ ์ค์
๋ฒํผ ์ฌ์ด์ฆ๋ ์ ์ถ๋ ฅ ์์ ์ ์ฑ๋ฅ์ ์ค์ํ ์ํฅ์ ๋ฏธ์น๋ค. ๋๋ฌด ์์ ๋ฒํผ๋ ์์ฃผ I/O ์์ ์ ๋ฐ์์์ผ ์ฑ๋ฅ์ด ๋จ์ด์ง๊ณ , ๋๋ฌด ํฐ ๋ฒํผ๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ์ ์ ํ ํฌ๊ธฐ์ ๋ฒํผ๋ฅผ ์ค์ ํด ์ ์ถ๋ ฅ ์์ ์ ์ฑ๋ฅ์ ์ต์ ํํด์ผ ํ๋ค.
์๋ฐ์ BufferedInputStream๊ณผ BufferedOutputStream ํด๋์ค์ ์์ฑ์๋ฅผ ๋ณด๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 8KB ํฌ๊ธฐ์ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ํฌ๊ธฐ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
๋ฒํผ์ ํ๋ฌ์ Flush
flush() ๋ฉ์๋๋ ๋ฒํผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชฉ์ ์ง๋ก ๋ด๋ณด๋ด๋ ์ญํ ์ ํ๋ค.
์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์ธ ๋ ๋ฒํผ์ ๋จผ์ ์ ์ฅ๋๋๋ฐ, ์์ง ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ์ง ์์ ๊ฒฝ์ฐ์๋ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ์ง ์๋๋ค. ์ด๋ flush() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ฒํผ์ ๋จ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋ก ์ถ๋ ฅํ๋ค.
BufferedWriter๋ BufferedOutputStream ๊ฐ์ ํด๋์ค์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
์๋ ํ๋ฌ์ค AutoFlush
PrintWriter์ ๊ฐ์ ํด๋์ค์๋ ์๋ ํ๋ฌ์ ๊ธฐ๋ฅ์ด ์๋ค. ์๋ฅผ ๋ค์ด, println() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ๋ฌ์ํ๋ ๊ธฐ๋ฅ์ด ์์ด ์ฌ์ฉ์ ์ ๋ ฅ์ด๋ ์ค์ํ ๋ฉ์์ง๋ฅผ ์ฆ์ ์ถ๋ ฅํด์ผ ํ ๋ ์ ์ฉํ๋ค.
NIO์ ์ ํต์ ์ธ I/O์์์ ๋ฒํผ
NIO(New I/O) ํจํค์ง์์๋ ๋ฒํผ๊ฐ ์ ์ถ๋ ฅ ์์ ์ ์ค์ํ ๋ถ๋ถ์ด๋ค. java.nio.Buffer ํด๋์ค๋ฅผ ํตํด ๋ฒํผ๋ฅผ ์ง์ ๊ด๋ฆฌํ๊ณ , ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์ ํต์ ์ธ I/O(java.io)์์๋ ๋ฒํผ๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋์ง๋ง, NIO ๋ฒํผ์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฒํผ๋ฅผ ๋ค๋ฃจ๋ฉฐ ๋ ์ ๋ฐํ ๋ฐ์ดํฐ ์ ์ก๊ณผ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ฒํผ์ Close()
๋ฒํผ์ ๊ด๋ จ๋ ์คํธ๋ฆผ์ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ close() ๋ฉ์๋๋ฅผ ํธ์ถํด ๋ฆฌ์์ค๋ฅผ ํด์ ํด์ผ ํ๋ค. ์คํธ๋ฆผ์ ๋ซ์ง ์์ผ๋ฉด ํ์ผ์ด๋ ๋คํธ์ํฌ ์์์ด ๊ณ์ ์ ์ ๋์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค. Java 7๋ถํฐ๋ try-with-resource ๋ฌธ๋ฒ์ ์ฌ์ฉํด ์ฌ๋์ผ๋ก ๋ฆฌ์์ค๋ฅผ ํด์ ํ ์ ์๋ค.
์์
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] IO, NIO ์ฐจ์ด (1) | 2024.10.14 |
---|---|
[Java] I/O Channel (0) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] RPC Remote Procedure Call ์๊ฒฉ ํ๋ก์์ ํธ์ถ (3) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (3) | 2024.10.11 |
[ํ๋ก๊ทธ๋๋ฐ] ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ (0) | 2024.10.11 |