๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/Java

[ch.15] ์ž…์ถœ๋ ฅ I/O

by OR15A 2023. 11. 20.

I/O

  • Input, Output
  • ์ž…์ถœ๋ ฅ, ์žฅ์น˜์™€ ํ”„๋กœ๊ทธ๋žจ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ธฐ
  • NIO๋ผ๋Š” ๊ฒƒ๋„ ์žˆ์Œ(non-blocking I/O)

 

์ŠคํŠธ๋ฆผ

  • ์ž…์ถœ๋ ฅ์—์„œ์˜์ŠคํŠธ๋ฆผ์€ 14์žฅ์˜์ŠคํŠธ๋ฆผ๊ณผ๋Š” ๋‹ค๋ฅธ๊ฐœ๋….
  • 15์žฅ์˜ ์ŠคํŠธ๋ฆผ์€ I/O๋ฅผ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฐ์ฒด
  • ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ๊ฒฐํ†ต๋กœ.
  • ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅํ•จ.
  • ์ž…/์ถœ๋ ฅ ๋™์‹œ์— ์ˆ˜ํ–‰ ์‹œ 2๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์ด ํ•„์š”ํ•จ.
  • ๋จผ์ €๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ฐ›์Œ.
  • ์ค‘๊ฐ„์— ๊ฑด๋„ˆ๋œ€ ์—†์ด ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ธฐ.
  • ์–ด๋–ค๋Œ€์ƒ์„ ์ž‘์—…ํ•˜๋Š”์ง€?์ž…๋ ฅ/์ถœ๋ ฅ์ธ์ง€? ๊ณ ๋ คํ•ด์„œ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•จ.

 

์ŠคํŠธ๋ฆผ์˜ ์ตœ๊ณ ์กฐ์ƒ

  • InputStream
    • Read. ์ฝ๊ธฐ๋ฅผ ๋„์™€์คŒ(๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜)
  • OutputStream
    • Write. ์“ฐ๊ธฐ๋ฅผ ๋„์™€์คŒ(๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜)

 

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

  • ์ŠคํŠธ๋ฆผ์˜ ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•จ.
  • ์ŠคํŠธ๋ฆผ ๊ธฐ์„ ํ–ฅ์ƒ๊ณผ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ŠคํŠธ๋ฆผ์„ ๋จผ์ € ์ƒ์„ฑํ•œ ๋‹ค์Œ์— ์ด๋ฅผ ์ด์šฉํ•ด์„œ ๋ณด์กฐ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•จ.
  • ๋ชจ๋“  ๋ณด์กฐ์ŠคํŠธ๋ฆผ์˜ ์ตœ๊ณ  ์กฐ์ƒ์€ ์ŠคํŠธ๋ฆผ ์กฐ์ƒ.

 

InputStream

  • ์ถ”์ƒํด๋ž˜์Šค
  • ๊ฐ™์€ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ = ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•˜๋ฉฐ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋™์ž‘์„ ์ œ๊ณตํ•จ.
  • 1byte๋ฅผ ์ฝ๋Š”๋‹ค = 8bit (int 0~255)

 

 

 

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

  • ๋ฌธ์ž๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ์‹œ ์‚ฌ์šฉํ•จ
  • ๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜์€ ์ž…์ถœ๋ ฅ๋‹จ์œ„ 1byte์ธ๋ฐ, ์˜์–ด๋ฌธ์ž 2byte, ASCII๋Š” 1byte, ํ•œ๊ธ€์€(UTF-8์€ 3byte, UTF-16์€ 2byte)๋กœ ๋ฌธ์ž๋ฐ์ดํ„ฐ์šฉ ์ŠคํŠธ๋ฆผ์ด ํ•„์š”ํ•จ

 

๋ฌธ์ž๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ์˜ ์ตœ๊ณ ์กฐ์ƒ

  • Reader, Writter
  • ๋ฌธ์ž๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ์—์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ์–ด์˜ค๋Š” ์ด์œ ๋Š” I/O์ž‘์—…์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ.
  • ๋ฌธ์ž๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ์‹์ด ๋‹ค์–‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์˜ โ‘ข๋ฒˆ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ๋ฉ”์„œ๋“œ๊ฐ€ ๋จ.

 

 

 

InputStream์˜ ๋ฉ”์„œ๋“œ ์ผ๋ถ€

  • ๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ ์ŠคํŠธ๋ฆผ๊ณผ ํ‘œ์ค€์ž…์ถœ๋ ฅ ๋นผ๊ณ ๋Š” ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋“  ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ๋‚œ ํ›„ close( )๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ˜๋“œ์‹œ ๋‹ซ์•„์ฃผ์–ด์•ผ ํ•จ.

 

OutputStream์˜ ๋ฉ”์„œ๋“œ ์ผ๋ถ€

 

 

๋ณด์กฐ์ŠคํŠธ๋ฆผ์—์„œ close( )๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

  • = ๋ณด์กฐ์ŠคํŠธ๋ฆผ flush( ) + ๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ close( )
  • flush( ) : close( )๋‚ด๋ถ€์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ณ  ๋ฒ„ํผ์—๋‚จ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚จ๊น€์—†์ด ๋ชจ๋‘ ๋ฐฉ์ถœํ•˜๋Š”๋ฉ”์„œ๋“œ