Search
Duplicate
๐ŸฅŽ

IO Stream

OutputStream

์ž…์ถœ๋ ฅ(I/O)์€ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์—์„œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”๋Š” ์ŠคํŠธ๋ฆผ(Stream)์œผ๋กœ๋ถ€ํ„ฐ I/O๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. InputStream์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ , OutputStream์€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ด๋‹ค. FilterStream์€ InputStream์ด๋‚˜ OutputStream์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค. FilterStream์€ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (e.g. ์•”ํ˜ธํ™”, ์••์ถ•, ํฌ๋งท ๋ณ€ํ™˜) Stream์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ์ฝ๊ณ  ์“ด๋‹ค. ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ํ…์ŠคํŠธ(๋ฌธ์ž)๋ฅผ ์ฝ๊ณ  ์“ฐ๋ ค๋ฉด Reader์™€ Writer ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. Reader, Writer๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ(e.g. UTF-8)์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์ž๋ฐ”์˜ ๊ธฐ๋ณธ ์ถœ๋ ฅ ํด๋ž˜์Šค๋Š” java.io.OutputStream์ด๋‹ค. OutputStream์˜ write(int b) ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ฐ˜ ๋ฉ”์„œ๋“œ์ด๋‹ค.
OutputStream์€ ๋‹ค๋ฅธ ๋งค์ฒด์— ๋ฐ”์ดํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. OutputStream์˜ ์„œ๋ธŒ ํด๋ž˜์Šค(subclass)๋Š” ํŠน์ • ๋งค์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด write(int b) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, FilterOutputStream์€ ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ, DataOutputStream์€ ์ž๋ฐ”์˜ primitive type data๋ฅผ ๋‹ค๋ฅธ ๋งค์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. write ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค. write(byte[] data)์™€ write(byte b[], int off, int len) ๋ฉ”์„œ๋“œ๋Š” 1๋ฐ”์ดํŠธ ์ด์ƒ์„ ํ•œ ๋ฒˆ์— ์ „์†ก ํ•  ์ˆ˜ ์žˆ์–ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.
outputStream.write(int byte); // ํŠน์ • ๋ฐ”์ดํŠธ๋ฅผ write outputStream.write(byte[] b[]); // ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ write outputStream.toString(); // write ๋œ ๊ฑฐ๋ฅผ String ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์คŒ
Java
๋ณต์‚ฌ

BufferedOutputStream

ํšจ์œจ์ ์ธ ์ „์†ก์„ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์—์„œ ๋ฒ„ํผ๋ง์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. BufferedOutputStream ํ•„ํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ฒ„ํผ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฒ„ํผ๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด OutputStream์„ ์‚ฌ์šฉํ•  ๋•Œ flush๋ฅผ ์‚ฌ์šฉํ•˜์ž. flush() ๋ฉ”์„œ๋“œ๋Š” ๋ฒ„ํผ๊ฐ€ ์•„์ง ๊ฐ€๋“ ์ฐจ์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ๊ฐ•์ œ๋กœ ๋ฒ„ํผ์˜ ๋‚ด์šฉ์„ ์ „์†กํ•œ๋‹ค. Stream์€ ๋™๊ธฐ(synchronous)๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํผ๊ฐ€ ์ฐฐ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋ฐ๋“œ๋ฝ(deadlock) ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— flush๋กœ ํ•ด์ œํ•œ๋‹ค.
try-with-resources ๋Š” java9 ๋ถ€ํ„ฐ, ์ž๋™์œผ๋กœ close ์‹œ์ผœ์คŒ

InputStream

์ž๋ฐ”์˜ ๊ธฐ๋ณธ ์ž…๋ ฅ ํด๋ž˜์Šค๋Š” java.io.InputStream์ด๋‹ค. InputStream์€ ๋‹ค๋ฅธ ๋งค์ฒด๋กœ๋ถ€ํ„ฐ ๋ฐ”์ดํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. InputStream์˜ read() ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ฐ˜ ๋ฉ”์„œ๋“œ์ด๋‹ค. public abstract int read() throws IOException; InputStream์˜ ์„œ๋ธŒ ํด๋ž˜์Šค(subclass)๋Š” ํŠน์ • ๋งค์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด read() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
read() ๋ฉ”์„œ๋“œ๋Š” ๋งค์ฒด๋กœ๋ถ€ํ„ฐ ๋‹จ์ผ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š”๋ฐ, 0๋ถ€ํ„ฐ 255 ์‚ฌ์ด์˜ ๊ฐ’์„ int ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. int ๊ฐ’์„ byte ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด -128๋ถ€ํ„ฐ 127 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Stream ๋์— ๋„๋‹ฌํ•˜๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
is = new ByteArrayInputStream(byte[] b[]); // ์ฝ์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด new String(is.readAllBytes()); // ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ ๋ฌธ์ž๋กœ ๋ฐ”๊ฟˆ
Java
๋ณต์‚ฌ
new String(byte[] b[]) ์™€์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

BufferedInputStream

ํ•„ํ„ฐ๋Š” ํ•„ํ„ฐ ์ŠคํŠธ๋ฆผ, reader, writer๋กœ ๋‚˜๋‰œ๋‹ค. ํ•„ํ„ฐ๋Š” ๋ฐ”์ดํŠธ๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. reader, writer๋Š” UTF-8, ISO 8859-1 ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ํ…์ŠคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
BufferedInputStream์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ์— ์ €์žฅํ•œ๋‹ค. InputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„ํ„ฐ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•˜๋ฉด ํ•„ํ„ฐ์— ์—ฐ๊ฒฐ๋œ๋‹ค. ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฒ„ํผ์˜ ๊ธฐ๋ณธ ์‚ฌ์ด์ฆˆ๋Š” ์–ผ๋งˆ์ผ๊นŒ?
final InputStream bufferedInputStream = new BufferedInputStream(inputStream);
Java
๋ณต์‚ฌ

BufferedReader, InputStreamReader

์ž๋ฐ”์˜ ๊ธฐ๋ณธ ๋ฌธ์ž์—ด์€ UTF-16 ์œ ๋‹ˆ์ฝ”๋“œ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž(char)๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์ธ์ฝ”๋”ฉ์„ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค. InputStreamReader๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ์— ๋”ฐ๋ผ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. reader, writer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
InputStreamReader๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž(char)๋กœ ์ฝ์–ด์˜จ๋‹ค. ํ•„ํ„ฐ์ธ BufferedReader๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด readLine ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด(String)์„ ํ•œ ์ค„ ์”ฉ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
Java
๋ณต์‚ฌ