Live-Study

[13์ฃผ์ฐจ] I/O

youn12 2021. 2. 19. 16:15
โœ๏ธ Info.

- Java I/O ํ•™์Šต

๐Ÿ“‹ List.

1. ์ŠคํŠธ๋ฆผ (Stream)
2. ๋ฒ„ํผ(Buffer)
3. ์ฑ„๋„(Channel)
4. Byte
5. Character
6. ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ (System.in, System.out, System.err)
7. ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ


โœ”๏ธ Content.

 

1. ์ŠคํŠธ๋ฆผ (Stream)

 

  • ์ž๋ฐ”๋Š” ํŒŒ์ผ์ด๋‚˜ ์ฝ˜์†”์˜ ์ž…์ถœ๋ ฅ์„ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ , ์ŠคํŠธ๋ฆผ(Stream)์ด๋ผ๋Š” ํ๋ฆ„์„ ํ†ตํ•ด ๋‹ค๋ฃฌ๋‹ค.
  • ์‹ค์ œ ์ž…๋ ฅ์ด๋‚˜ ์ถœ๋ ฅ์ด ํ‘œํ˜„๋œ ๋ฐ์ดํ„ฐ์˜ ์ด์ƒํ™”๋œ ํ๋ฆ„
  • ์šด์˜์ฒด์ œ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ƒ์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ, ์ค‘๊ฐ„ ๋งค๊ฐœ์ž ์—ญํ• 

Stream

1). ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ(InputStream๊ณผ OutputStream)

 

  • ์ŠคํŠธ๋ฆผ์€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.
  • java.io ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด InputStream, OutputStream ํด๋ž˜์Šค๋ฅผ ๋ณ„๋„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ฆ‰, ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

1.1) InputStream

InputStream

 

  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.
  • ๋ชจ๋“  ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์€ InputStream ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • read() ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

 

๋ฉ”์†Œ๋“œ ์„ค๋ช…
abstract int read() ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ 1๋ฐ”์ดํŠธ๋ฅผ ์ฝ๊ณ 
์ฝ์€ ๋ฐ”์ดํŠธ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค
int read(byte[] b) ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ํŠน์ • ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด๋“ค์ธ ํ›„, ๋ฐฐ์—ด b์— ์ €์žฅํ•˜๊ณ 
์‹ค์ œ๋กœ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
int read(byte[] b, int off, int len) ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ len ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด๋“ค์ธ ํ›„, ๋ฐฐ์—ด b[off]๋ถ€ํ„ฐ ์ €์žฅํ•˜๊ณ 
์‹ค์ œ๋กœ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜์ธ len๊ฐœ๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ  ๋งŒ์•ฝ len ๊ฐœ๋ฅผ ๋ชจ๋‘ ์ฝ์ง€ ๋ชปํ•˜๋ฉด ์‹ค์ œ๋กœ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
void close() ์‚ฌ์šฉํ•œ ์‹œ์Šคํ…œ ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ  ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๋Š”๋‹ค.

 

read()์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด int์ธ ์ด์œ 

 

  • read()์˜ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ๋ฒ”์œ„๋Š” 0~255, -1
  • ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ๋” ์ด์ƒ ์ฝ์–ด ๋“ค์ผ ๋ฐ”์ดํŠธ๊ฐ€ ์—†์œผ๋ฉด, -1์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด byteํƒ€์ž…์ด๋ฉด -1์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— intํ˜•์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

 

InputStream read() ์‚ฌ์šฉ ์˜ˆ

    void input() throws IOException {
        InputStream in = System.in;
        int read;
        while((read = in.read()) != -1){            
        }
    }

 

1.2) OutputStream

 

OutputStream

 

  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.
  • ๋ชจ๋“  ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ OutputStream ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • write() ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

 

๋ฉ”์†Œ๋“œ ์„ค๋ช…
abstract void write(int b) ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ 1๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค (b์˜ ๋ 1๋ฐ”์ดํŠธ)
void write(byte[] b) ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด b์˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
void write(byte[] b, int off, int len) ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด b[off] ๋ถ€ํ„ฐ len ๊นŒ์ง€์˜ ๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
void flush() ๋ฒ„ํผ์— ์ž”๋ฅ˜ํ•˜๋Š” ๋ชจ๋“  ๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
void close() ์‚ฌ์šฉํ•œ ์‹œ์Šคํ…œ ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ  ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๋Š”๋‹ค.

 

2). ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

๋ณด์กฐ ์ŠคํŠธ๋ฆผ

  • ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์ŠคํŠธ๋ฆผ์˜ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ์ŠคํŠธ๋ฆผ
  • ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ŠคํŠธ๋ฆผ
  • ํ•„ํ„ฐ(filter) ์ŠคํŠธ๋ฆผ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์ด๋Š” ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์˜ ์ผ๋ถ€๊ฐ€ FilterInputStream, FilterOutputStream์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋ฌธ์ž๋ณ€ํ™˜, ์ž…์ถœ๋ ฅ ์„ฑ๋Šฅ ํ–ฅ์ƒ, ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ž…์ถœ๋ ฅ, ๊ฐ์ฒด ์ž…์ถœ๋ ฅ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต

 

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์„ค๋ช…
FilterInputStream FilterOutputStream ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ
BufferedInputStream BufferedOutputStream ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ
DataInputStream DataOutputStream ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
ObjectInputStream ObjectOutputStream ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด ๋‹จ์œ„๋กœ ์ฝ๊ฑฐ๋‚˜, ์ฝ์–ด ๋“ค์ธ ๊ฐ์ฑ„๋ฅผ ์—ญ์ง๋ ฌํ™” ์‹œํ‚จ๋‹ค.
SequenceInputStream X ๋‘ ๊ฐœ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ๊ฑธ
PushbackInputStream X ๋‹ค๋ฅธ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜์—ฌ push back์ด๋‚˜ unread์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€
X PrintStream ๋‹ค๋ฅธ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€

 

๋ณด์กฐ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ

 

  • ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•  ๋•Œ์—๋Š” ์ž์‹ ์ด ์—ฐ๊ฒฐ๋  ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๊ฐ’์œผ๋กœ ๋ฐ›๋Š”๋‹ค.
  • ๋ณด์กฐ ์ŠคํŠธ๋ฆผ ๋ณ€์ˆ˜ = new ๋ณด์กฐ ์ŠคํŠธ๋ฆผ(์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ)
void filterStream(){
        // ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ
        InputStream inputStream = System.in;
        // ๋ณด์กฐ ์ŠคํŠธ๋ฆผ
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
    }

 

 

์ŠคํŠธ๋ฆผ ์ฒด์ธ

  • ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ๋˜ ๋‹ค๋ฅธ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์—๋„ ์—ฐ๊ฒฐ๋˜์–ด ์ŠคํŠธ๋ฆผ ์ฒด์ธ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    void filterStream(){
        // ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ
        InputStream inputStream = System.in;
        // ๋ณด์กฐ ์ŠคํŠธ๋ฆผ
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        // ๋ณด์กฐ ์ŠคํŠธ๋ฆผ 2
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    }

 

2. ๋ฒ„ํผ(Buffer)

 

๋ฒ„ํผ

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ
  • CPU์™€ ์ž…์ถœ๋ ฅ ์žฅ์น˜์˜ ์†๋„ ์ฐจ์ด์—์„œ ๋‚˜์˜ค๋Š” ๋น„ํšจ์œจ์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ €, ๊ณ ์† ์žฅ์น˜ ๊ฐ„์˜ ์†๋„ ์ฐจ์ด๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ค‘๊ฐ„ ์ €์žฅ์†Œ
  • ๋ณต์ˆ˜ ๊ฐœ์˜ ๋ฐ”์ดํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์ž…๋ ฅ๋ฐ›๊ณ  ํ•œ ๋ฒˆ์— ์ถœ๋ ฅ
์ŠคํŠธ๋ฆผ ๊ตฌ๋ถ„ ์ž…๋ ฅ ์ถœ๋ ฅ
๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ  BufferedInputStream BufferedOutputStream
๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ BufferedReader BufferedWriter

 

  • BufferedInputStream๊ณผ BufferedReader ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๊ฐ’์œผ๋กœ ์ค€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด 81292 ๋‚ด๋ถ€ ๋ฒ„ํผ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • BufferdOutputStream๊ณผ BufferedWriter ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๊ฐ’์œผ๋กœ ์ค€ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด 8192 ๋‚ด๋ถ€ ๋ฒ„ํผ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • BufferedInputStream๊ณผ BufferedOutputStream์€ ์ตœ๋Œ€ 8192 ๋ฐ”์ดํŠธ๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.
  • BufferedReader๊ณผ BufferedWriter๋Š” ์ตœ๋Œ€ 8192 ๋ฌธ์ž๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์ด๋Š” ๋ฐฉ๋ฒ•์€ InputStream ๋˜๋Š” Reader์™€ ๋™์ผํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ OutputStream ๋˜๋Š” Writer์™€ ๋™์ผํ•˜๋‹ค.

 

1). BufferedInputStream๊ณผ BufferedReader

 

๋ฒ„ํผ ์ž…๋ ฅ

 

 

  • ์ž…๋ ฅ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์ž์‹ ์˜ ๋‚ด๋ถ€ ๋ฒ„ํผ ํฌ๊ธฐ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ๊ณ  ๋ฒ„ํผ์— ์ €์žฅ
  • ํ”„๋กœ๊ทธ๋žจ์€ ์™ธ๋ถ€์˜ ์ž…๋ ฅ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ฝ๋Š” ๋Œ€์‹  ๋ฒ„ํผ๋กœ๋ถ€ํ„ฐ ์ฝ์Œ์œผ๋กœ์จ ์ฝ๊ธฐ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • BufferedReader๋Š” readLine() ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด(\r) ๋ผ์ธํ”ผ๋“œ(\n)๋กœ ๊ตฌ๋ถ„๋œ ํ–‰ ๋‹จ์œ„์˜ ๋ฌธ์ž์—ด์„ ํ•œ๊บผ๋ฒˆ์— ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
void buffered(){
        // ์ƒ์„ฑ์ž - ๋ฐ”์ดํŠธ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ
        BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);
        // ์ƒ์„ฑ์ž - ๋ฌธ์ž ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    }

 

2). BufferedOutputStream๊ณผ BufferdWriter

๋ฒ„ํผ ์ถœ๋ ฅ

  • ์ฃผ์˜ํ•  ์ ์€ ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ๋งŒ ์ถœ๋ ฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„์ด ๋ชฉ์ ์ง€๋กœ ๊ฐ€์ง€ ๋ชปํ•˜๊ณ  ๋ฒ„ํผ์— ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ ์ž‘์—…์„ ๋งˆ์นœ ํ›„์—๋Š” flush() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ๋ฒ„ํผ์— ์ž”๋ฅ˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณด๋‚ด๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.
 void buffered(){
        // ์ƒ์„ฑ์ž - ๋ฐ”์ดํŠธ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(System.out);
        // ์ƒ์„ฑ์ž - ๋ฌธ์ž ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
	BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    }

 

3. ์ฑ„๋„(Channel)

 

  • ์ฑ„๋„์€ ์ŠคํŠธ๋ฆผ๊ณผ ๋‹ฌ๋ฆฌ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋•Œ๋ฌธ์— ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ์ฑ„๋„์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์˜ˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” FileChannel ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

* ์ฑ„๋„(Channel) ๊ณต๋ถ€ํ•˜๋ฉฐ ์ฑ„๋„ ๊ธฐ๋ฐ˜์ธ NIO๋ฅผ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค. 

 

1). NIO

  • ์ž๋ฐ” 4๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์ž…์ถœ๋ ฅ(NIO : New Input/Output)์ด๋ผ๋Š” ๋œป์—์„œ java.nio ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์—ˆ๋‹ค.
  • ์ž๋ฐ” 7๋กœ ๋ฒ„์ „์—… ํ•˜๋ฉด์„œ ์ž๋ฐ” IO์™€ NIO ์‚ฌ์ด์˜ ์ผ๊ด€์„ฑ ์—†๋Š” ํด๋ž˜์Šค ์„ค๊ณ„๋ฅผ ๋ฐ”๋กœ ์žก๊ณ , ๋น„๋™๊ธฐ ์ฑ„๋„ ๋“ฑ์˜ ๋„คํŠธ์›Œํฌ ์ž์›์„ ๋Œ€ํญ ๊ฐ•ํ™”ํ•œ NIO.2 API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • NIO.2๋Š” ๊ธฐ์กด java.nio์˜ ํ•˜์œ„ ํŒจํ‚ค์ง€(java.nio.channels, java.nio.charset, java.nio.file)์— ํ†ตํ•ฉ๋˜์—ˆ๋‹ค.
NIO ํŒจํ‚ค์ง€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ
java.nio ๋‹ค์–‘ํ•œ ๋ฒ„ํผ ํด๋ž˜์Šค
java.nio.channels ํŒŒ์ผ ์ฑ„๋„, TCP ์ฑ„๋„, UDP ์ฑ„๋„ ๋“ฑ์˜ ํด๋ž˜์Šค
java.nio.channels.spi java.nio.channels ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค ์ œ๊ณต์ž ํด๋ž˜์Šค
java.nio.charset ๋ฌธ์ž์…‹, ์ธ์ฝ”๋”, ๋””์ฝ”๋” API
java.nio.charset.spi java.nio.charset ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค ์ œ๊ณต์ž ํด๋ž˜์Šค
java.nio.file ํŒŒ์ผ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
java.nio.file.attribute ํŒŒ์ผ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
java.nio.file.spi java.nio.file ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค ์ œ๊ณต์ž ํด๋ž˜์Šค

 

2). IO์™€ NIO์˜ ์ฐจ์ด์ 

 

  • IO์™€ NIO๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž…์ถœ๋ ฅํ•œ๋‹ค๋Š” ๋ชฉ์ ์€ ๋™์ผํ•˜์ง€๋งŒ, ๋ฐฉ์‹์— ์žˆ์–ด์„œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.
๊ตฌ๋ถ„ IO NIO
์ž…์ถœ๋ ฅ ๋ฐฉ์‹ ์ŠคํŠธ๋ฆผ ๋ฐฉ์‹ ์ฑ„๋„ ๋ฐฉ์‹
๋ฒ„ํผ ๋ฐฉ์‹ ๋„Œ ๋ฒ„ํผ(non-buffer) ๋ฒ„ํผ(buffer)
๋น„๋™๊ธฐ ๋ฐฉ์‹ ์ง€์› ์•ˆํ•จ ์ง€์›
๋ธ”๋กœํ‚น / ๋„Œ๋ธ”๋กœํ‚น ๋ฐฉ์‹ ๋ธ”๋กœํ‚น ๋ฐฉ์‹๋งŒ ์ง€์› ๋ธ”๋กœํ‚น / ๋„Œ๋ธ”๋กœํ‚น ๋ฐฉ์‹ ๋ชจ๋‘ ์ง€์›

 

3). ์ŠคํŠธ๋ฆผ vs ์ฑ„๋„

 

- ์ŠคํŠธ๋ฆผ

  • IO๋Š” ์ŠคํŠธ๋ฆผ(Stream) ๊ธฐ๋ฐ˜์ด๋‹ค.
  • ์ŠคํŠธ๋ฆผ์€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” FileInputStream๊ณผ FileOutputStream์„ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

- ์ฑ„๋„

  • NIO๋Š” ์ฑ„๋„(Channel) ๊ธฐ๋ฐ˜์ด๋‹ค.
  • ์ฑ„๋„์€ ์ŠคํŠธ๋ฆผ๊ณผ ๋‹ฌ๋ฆฌ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋•Œ๋ฌธ์— ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ์ฑ„๋„์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์˜ˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” FileChannel ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

4). ๋„Œ ๋ฒ„ํผ vs ๋ฒ„ํผ

 

- ๋„Œ ๋ฒ„ํผ(IO)

  • IO์—์„œ๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์ด 1๋ฐ”์ดํŠธ๋ฅผ ์“ฐ๋ฉด ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์ด 1๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š”๋‹ค. ์ด๋Ÿฐ ์‹œ์Šคํ…œ์€ ๋Œ€์ฒด๋กœ ๋Š๋ฆฌ๋‹ค.
  • ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณต์ˆ˜ ๊ฐœ์˜ ๋ฐ”์ดํŠธ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ž…๋ ฅ๋ฐ›๊ณ  ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋‚ธ๋‹ค.
  • IO๋Š” ๋ฒ„ํผ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ธ BufferedInputStream, BufferdOutputStream์„ ์—ฐ๊ฒฐํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
  • IO๋Š” ์ŠคํŠธ๋ฆผ์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฉด, ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ด๋™ํ•ด ๊ฐ€๋ฉฐ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์—†๋‹ค.

- ๋ฒ„ํผ(IO + ๋ณด์กฐ ์ŠคํŠธ๋ฆผ, NIO)

  • NIO๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…์ถœ๋ ฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— IO๋ณด๋‹ค๋Š” ์ž…์ถœ๋ ฅ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.
  • ์ฑ„๋„์€ ๋ฒ„ํผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ์— ์ €์žฅํ•œ๋‹ค.
  • NIO๋Š” ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€์กฐ๊ฑด ๋ฒ„ํผ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํผ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ด๋™ํ•ด ๊ฐ€๋ฉด์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

IO, NIO

 

5). ๋ธ”๋กœํ‚น vs ๋„Œ ๋ธ”๋กœํ‚น

 

- ๋ธ”๋กœํ‚น(blocking) (IO, NIO)

  • IO๋Š” ๋ธ”๋กœํ‚น๋œ๋‹ค.
  • ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์˜ read() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๊ธฐ ์ „๊นŒ์ง€ ์Šค๋ ˆ๋“œ๋Š” ๋ธ”๋กœํ‚น(๋Œ€๊ธฐ ์ƒํƒœ)๋œ๋‹ค.
  • ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์˜ write() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๊ธฐ ์ „๊นŒ์ง€ ์Šค๋ ˆ๋“œ๋Š” ๋ธ”๋กœํ‚น๋œ๋‹ค.
  • IO ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น๋˜๋ฉด ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์—†๊ณ  ๋ธ”๋กœํ‚น์„ ๋น ์ ธ๋‚˜์˜ค๊ธฐ ์œ„ํ•ด ์ธํ„ฐ๋ŸฝํŠธ(interrupt) ๋˜ํ•œ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ธ”๋กœํ‚น์„ ๋น ์ ธ๋‚˜์˜ค๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๋Š” ๊ฒƒ์ด๋‹ค.

- ๋„Œ ๋ธ”๋กœํ‚น(NIO)

  • ๋ธ”๋กœํ‚น์˜ ๋ฐ˜๋Œ€ ๊ฐœ๋…์œผ๋กœ ์ž…์ถœ๋ ฅ ์ž‘์—… ์‹œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • NIO๋Š” ๋ธ”๋กœํ‚น๊ณผ ๋„Œ๋ธ”๋กœํ‚น ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • IO ๋ธ”๋กœํ‚น๊ณผ์˜ ์ฐจ์ด์ ์€ NIO ๋ธ”๋กœํ‚น์€ ์Šค๋ ˆ๋“œ๋ฅผ ์ธํ„ฐ๋ŸฝํŠธํ•จ์œผ๋กœ์จ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
  • NIO์˜ ๋„Œ๋ธ”๋กœํ‚น์€ ์ž…์ถœ๋ ฅ ์ž‘์—… ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ ์ฑ„๋„๋งŒ ์„ ํƒํ•ด์„œ ์ž‘์—… ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—… ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ž‘์—… ์ค€๋น„ ์™„๋ฃŒ : ์ง€๊ธˆ ๋ฐ”๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
  • NIO ๋„Œ๋ธ”๋กœํ‚น์˜ ํ•ต์‹ฌ ๊ฐ์ฒด๋Š” ๋ฉ€ํ‹ฐํ”Œ๋ž™์„œ(multiplexor)์ธ ์…€๋ ‰ํ„ฐ(Selector)์ด๋‹ค. ์…€๋ ‰ํ„ฐ๋Š” ๋ณต์ˆ˜ ๊ฐœ์˜ ์ฑ„๋„ ์ค‘์—์„œ ์ค€๋น„ ์™„๋ฃŒ๋œ ์ฑ„๋„์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

6). IO์™€ NIO์˜ ์„ ํƒ

 

- NIO

  • NIO๋Š” ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ๋˜๋Š” ๋ฉ€ํ‹ฐ ํŒŒ์ผ๋“ค์„ ๋„Œ๋ธ”๋กœํ‚น์ด๋‚˜ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๋„ํ•œ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์„ ํ”ผํ•˜๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ๋‹ค.
  • NIO๋Š” ์šด์˜์ฒด์ œ์˜ ๋ฒ„ํผ(๋‹ค์ด๋ ‰ํŠธ ๋ฒ„ํผ)๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…์ถœ๋ ฅ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • NIO๋Š” ์—ฐ๊ฒฐ ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ํ•˜๋‚˜์˜ ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.
    • ์Šค๋ ˆ๋“œ์—์„œ ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋ฉด ๋Œ€๊ธฐํ•˜๋Š” ์ž‘์—…์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ๋œ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

- IO

  • IO๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ NIO๋ณด๋‹ค ์œ ๋ฆฌํ•˜๋‹ค.
    • NIO๋Š” ๋ฒ„ํผ์˜ ํ• ๋‹น ํฌ๊ธฐ๋„ ๋ฌธ์ œ๊ฐ€ ๋˜๊ณ , ๋ชจ๋“  ์ž…์ถœ๋ ฅ ์ž‘์—…์— ๋ฒ„ํผ๋ฅผ ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐ›์€ ์ฆ‰์‹œ ์ฒ˜๋ฆฌํ•˜๋Š” IO๋ณด๋‹ค๋Š” ์ข€ ๋” ๋ณต์žกํ•˜๋‹ค.
  • ์—ฐ๊ฒฐ ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ์ ๊ณ , ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€์šฉ๋Ÿ‰์ด๋ฉด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ํ•„์š”์„ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” IO๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

4. Byte

 

 

 

๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ

 

  • ์ž๋ฐ”์—์„œ์˜ ์ŠคํŠธ๋ฆผ(Stream)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.
  • ๊ทธ๋ฆผ, ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด, ๋ฌธ์ž ๋“ฑ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ž…์ถœ๋ ฅ ๋Œ€์ƒ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
ํŒŒ์ผ FileInputStream FileOutputStream
๋ฉ”๋ชจ๋ฆฌ ByteArrayInputStream ByteArrayOutputStream
ํ”„๋กœ์„ธ์Šค PipedInputStream PipedOutputStream
์˜ค๋””์˜ค ์žฅ์น˜ AudioInputStream AudioOutputStream

 

5. Character

 

1). ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ŠคํŠธ๋ฆผ์€ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ž๋ฐ”์—์„œ๋Š” ๊ฐ€์žฅ ์ž‘์€ ํƒ€์ž…์ด char ํ˜•์ธ 2๋ฐ”์ดํŠธ ์ด๋ฏ€๋กœ, 1๋ฐ”์ดํŠธ์”ฉ ์ „์†ก๋˜๋Š” ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋Š” ์›ํ™œํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ํž˜๋“ค๋‹ค

๋”ฐ๋ผ์„œ ์ž๋ฐ”์—์„œ๋Š” ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ๋„ ๋ณ„๋„๋กœ ์ œ๊ณตํ•œ๋‹ค.

 

  • InputStream -> Reader, OutputStream -> Writer๋กœ ๋ณ€๊ฒฝํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ค๋กœ์ง€ ๋ฌธ์ž๋งŒ ๋ฐ›๊ณ  ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํŠนํ™”๋˜์–ด ์žˆ๋‹ค.
์ž…์ถœ๋ ฅ ๋Œ€์ƒ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
ํŒŒ์ผ FileReader FileWriter
๋ฉ”๋ชจ๋ฆฌ CharArrayReader CharArrayWriter
ํ”„๋กœ์„ธ์Šค PipedReader PipedWriter
๋ฌธ์ž์—ด StringReader StringWriter

 

2). ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

 

  • ์†Œ์Šค ์ŠคํŠธ๋ฆผ์ด ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ(InputStream, OutputStream, FileInputStream, FileOutputStream)์ด๋ฉด์„œ ์ž…์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌธ์ž๋ผ๋ฉด ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ž…์ถœ๋ ฅ์„ ํ•˜๋ฉฐ ๋ฌธ์ž์…‹์˜ ์ข…๋ฅ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” Reader์™€ Wrtier๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.
์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์„ค๋ช…
FilterReader FilterWriter ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ
BufferedReader BufferedWriter ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ
PushbackReader X ๋‹ค๋ฅธ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜์—ฌ push back์ด๋‚˜ unread์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€
X PrintWriter ๋‹ค๋ฅธ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€

 

6. ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ (System.in, System.out, System.err)

 

  • ์ž๋ฐ”์—์„œ๋Š” ์ฝ˜์†”๊ณผ ๊ฐ™์€ ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ์œ„ํ•ด System์ด๋ผ๋Š” ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.
  • java.lang ํŒจํ‚ค์ง€์— ํฌํ•จ
  • ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์ž๋ฐ”๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ๋ณ„๋„์˜ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํด๋ž˜์Šค ๋ณ€์ˆ˜ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์„ค๋ช…
System.in InputStream ์ฝ˜์†”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
System.out PrintStream ์ฝ˜์†”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
System.err PrintStream ์ฝ˜์†”๋กœ ๋ฐ์ดํ„ฐ(์—๋Ÿฌ)๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค

 

ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์˜ ๋Œ€์ƒ ๋ณ€๊ฒฝ

 

  • ์œ„์˜ ์„ธ ๊ฐ€์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์ฝ˜์†”๊ณผ ๊ฐ™์€ ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ŠคํŠธ๋ฆผ์— ์•„๋ž˜์˜ System ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์˜ ๋Œ€์ƒ์„ ๋‹ค๋ฅธ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฉ”์†Œ๋“œ ์„ค๋ช…
static void setIn(InputStream in) ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ๋Œ€์ƒ์„ ์ „๋‹ฌ๋œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€๊ฒฝํ•จ
static void setOut(PrintStream out) ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ๋Œ€์ƒ์„ ์ „๋‹ฌ๋œ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€๊ฒฝํ•จ
static void setErr(PrintStream err) ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ๋Œ€์ƒ์„ ์ „๋‹ฌ๋œ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€๊ฒฝํ•จ

 

7. ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ

 

1). File

 

java.io ์—์„œ ์ œ๊ณตํ•˜๋Š” File ํด๋ž˜์Šค๋Š” ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๊ธฐ๋Šฅ, ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ธฐ๋Šฅ์€ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์˜ ์ž…์ถœ๋ ฅ์€ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

  • ์•„๋ž˜๋Š” File ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.
  • ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ๋ถ„์ž๋Š” ์šด์˜์ฒด์ œ๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค. ์œˆ๋„๋Š” '\', '/'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์œ ๋‹‰์Šค๋‚˜ ๋ฆฌ๋ˆ…์Šค๋Š” '/'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • File.separator ์ƒ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ํ•ด๋‹น ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ๋ถ„์ž๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • File ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋‚˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

    void file(){
        File file = new File("E:\\test.txt");
        File file2 = new File("E:/test.txt");
    }

 

2). FileInputStream

 

  • FileInputStream ํด๋ž˜์Šค๋Š” ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฝ์–ด ๋“ค์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์ด๋‹ค.
  • ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • InputStream์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉ๋ฒ•์€ InputStream๊ณผ ๋™์ผํ•˜๋‹ค.
void fileInput(){
        try {
            // 1 - String ์ƒ์„ฑ 
            FileInputStream fileInputStream = new FileInputStream("E:/test.txt");

            // 2 - File ๊ฐ์ฒด๋กœ ์ƒ์„ฑ
            File file = new File("E:/test.txt");
            FileInputStream fileInputStream1 = new FileInputStream(file);

        } catch (FileNotFoundException fileNotFoundException) {
            fileNotFoundException.printStackTrace();
        }
    }

 

3). FileOutputStream

 

  • ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ.
  • ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • OutputStream์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉ๋ฒ•์€ OutputStream๊ณผ ๋™์ผํ•˜๋‹ค.
  • ์ฃผ์˜ํ•  ์ ์€ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜๋ฏ€๋กœ, ๊ธฐ์กด์˜ ๋‚ด์šฉ์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.
    • ๊ธฐ์กด์˜ ํŒŒ์ผ ๋‚ด์šฉ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ 3 ๊ณผ๊ฐ™์ด FileOutputStream ์ƒ์„ฑ์ž์˜ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ ๊ฐ’์„ true๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.
void fileOutput(){
        try {
            // 1 - String
            FileOutputStream outputStream = new FileOutputStream("E:/testOut.txt");

            // 2 - File ๊ฐ์ฒด ์‚ฌ์šฉ
            File file = new File("E:/testOut.txt");
            FileOutputStream outputStream1 = new FileOutputStream(file);

            // 3 - ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€(true)
            FileOutputStream outputStream2 = new FileOutputStream("E:/testOut.txt", true);
        } catch (FileNotFoundException fileNotFoundException) {
            fileNotFoundException.printStackTrace();
        }
    }

 

4). FileReader/FileWriter

 

  • ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ
  • ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ฝ๊ณ /์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๊ทธ๋ฆผ, ์˜ค๋””์˜ค, ๋น„๋””์˜ค ๊ฐ™์€ ํŒŒ์ผ์€ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.
  • FileReader -> Reader์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ Reader์™€ ์‚ฌ์šฉ๋ฒ• ๋™์ผ
  • FileWriter -> Writer์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ Writer์™€ ์‚ฌ์šฉ๋ฒ• ๋™์ผ

โ—๏ธ Refer.

http://www.tcpschool.com/java/java_io_file
์ด๊ฒƒ์ด ์ž๋ฐ”๋‹ค