๐ŸŒŠJava - I/O package .01

HCยท2022๋…„ 9์›” 8์ผ
1

๐ŸŽฏJava I/O package

API Document :
Provides for system input and output through data streams, serialization and the file system. Unless otherwise noted, passing a null argument to a constructor or method in any class or interface in this package will cause a NullPointerException to be thrown.

๋ฒˆ์—ญ : ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ, ์ง๋ ฌํ™” ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ†ตํ•œ ์‹œ์Šคํ…œ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋ช…์‹œ๋˜์ง€ ์•Š๋Š” ํ•œ, ์ด ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์žˆ๋Š” ์ƒ์„ฑ์ž๋‚˜ ๋ฉ”์„œ๋“œ์— null ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด NullPointerException์ด throw๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, Java I/O package์—๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ๊ณผ ๊ด€๋ จ๋œ ํด๋ž˜์Šค๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.


๐ŸŒˆI/O

Input(์ž…๋ ฅ), Output(์ถœ๋ ฅ)์˜ ์•ฝ์ž๋‹ค.
Input = TV์˜ ์ž…๋ ฅ ์ผ€์ด๋ธ”, Output = ์ถœ๋ ฅ ์ผ€์ด๋ธ”๊ณผ ๊ฐ™๋‹ค.


โšกStream

  • Input -> Output ์—์„œ ->๊ฐ€ Stream์ด๋‹ค.

Input,Output ๊ตฌ๋ถ„์—†์ด ์–ด๋Š ํ•œ ์ชฝ์—์„œ ๋‹ค๋ฅธ ์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ ค๋ฉด
์ผ์ข…์˜ ๋‹ค๋ฆฌ ์—ญํ• (ํ˜น์€ ์—ฐ๊ฒฐํ†ต๋กœ)์„ ํ•˜๋Š” ๋†ˆ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ ๋†ˆ์ด ๋ฐ”๋กœ Stream(->) ์ด๋‹ค.

Stream์˜ ์–ด์›์€ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ๋ฌผ์— ๋น„์œ ํ•˜์—ฌ ๋ถ™์—ฌ์ง„ ์ด๋ฆ„์ธ๋ฐ,
๋ฌผ์˜ ํ๋ฆ„๊ณผ ๊ฐ™์ด ํ•œ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ๋ฅด๋Š” ๋‹จ๋ฐฉํ–ฅํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ Stream์œผ๋กœ ์ž…๋ ฅ(Input)๊ณผ ์ถœ๋ ฅ(Output)์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.


โšกStream์€ ๋จผ์ € ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ฐ›๊ฒŒ ๋˜์–ด์žˆ๋‹ค.
(Queue ํ๋˜ฅ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ)

  • in.read(); ๋ฉ”์„œ๋“œ๋กœ ์ž…๋ ฅ ๋ฐ›๊ณ ,
  • out.write(); ๋ฉ”์„œ๋“œ๋กœ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

์ฆ‰, ๋ฌด์–ธ๊ฐ€์— ๋Œ€ํ•ด ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ๋ฅผ ๋™์‹œ์— ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด Stream ํ•˜๋‚˜๋กœ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ
InputStream, OutputStream ๋‘ ๊ฐœ์˜ Stream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.


โšกByte ๋‹จ์œ„ ์ŠคํŠธ๋ฆผ

InputStream, OutputStream ๋‘˜ ๋‹ค byte ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ Stream์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.

๊ด€๋ จ๋œ ๋ชจ๋“  byte ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.
byte๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉฐ ์ž…์ถœ๋ ฅ ๋Œ€์ƒ์— ๋”ฐ๋ผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅด๋‹ค.
๊ทธ๋ฆผ, ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋ฌธ์ž ๋“ฑ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, FileInputStream์€ File์„ InputStream ํด๋ž˜์Šค์—์„œ ํŒŒ์ผ์„ ์ฝ๋Š”๋ฐ ํ•„์š”ํ•œ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ์—๊ฒŒ ๋งž๊ฒŒ ๊ตฌํ˜„ํ•ด ๋†“์€ ํด๋ž˜์Šค์ด๋‹ค.


  • File - ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ Class
  • Console - ์ฝ˜์†”๋กœ๋ถ€ํ„ฐ ๋ฌธ์ž๋ฅผ ์ž…์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ Class

  • InputStream / OutputStream - byte ๋‹จ์œ„ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ์ตœ์ƒ์œ„ ์ž…์ถœ๋ ฅ Stream Class

โœ” byte ๋‹จ์œ„ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ํ•˜์œ„ Stream Class๋“ค

  • FileInputStream / FileOutputStream
  • DataInputStream / DataOutputStream
  • ObjectInputStream / ObjectOutputStream
  • BufferedReader / BufferedWriter
  • PrintStream

โœ”InputStream์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

  • void close(); โžก ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์Œ์œผ๋กœ์จ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ์ž์›์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • abstract int read(); โžก 1byte๋ฅผ ์ฝ์–ด์˜จ๋‹ค. ๋”์ด์ƒ ์ฝ์–ด์˜ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ผ์„œ InputStream์˜ ์ž์†๋“ค์€ ์ž์‹ ์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

  • int read(byte[] b); โžก ๋ฐฐ์—ด b์˜ ํฌ๊ธฐ๋งŒํผ ์ฝ์–ด์„œ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๊ณ , ์ฝ์–ด ์˜จ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์€ ํ•ญ์ƒ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. (๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๋‹ค.)

  • int read(byte[] b, int off, int len); โžก ์ตœ๋Œ€ len๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๋ฐฐ์—ด b์˜ ์ง€์ •๋œ ์œ„์น˜(off)๋ถ€ํ„ฐ ์ €์žฅํ•œ๋‹ค. ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ len๋ณด๋‹ค ์ ์„ ์ˆ˜๋„ ์žˆ๋‹ค.


โœ”OutputStream์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

  • void close(); โžก ์ž…๋ ฅ์†Œ์Šค๋ฅผ ๋‹ซ์Œ์œผ๋กœ์จ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ์ž์›์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • void flush(); โžก ์ŠคํŠธ๋ฆผ์˜ ๋ฒ„ํผ์— ์žˆ๋Š” ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถœ๋ ฅ์†Œ์Šค์— ์“ด๋‹ค.

  • abstract void write(int b); โžก ์ฃผ์–ด์ง„ ๊ฐ’์„ ์ถœ๋ ฅ์†Œ์Šค์— ์“ด๋‹ค.

  • void write(byte[] b); โžก ๋ฐฐ์—ด b์— ์ €์žฅ๋œ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถœ๋ ฅ์†Œ์Šค์— ์“ด๋‹ค.

  • void write(byte[] b, int off, int len); โžก ๋ฐฐ์—ด b์— ์ €์žฅ๋œ ๋‚ด์šฉ ์ค‘์—์„œ off๋ฒˆ์งธ๋ถ€ํ„ฐ len๊ฐœ ๋งŒํผ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ์ถœ๋ ฅ์†Œ์Šค์— ์“ด๋‹ค.


โšก๋ฌธ์ž ๋‹จ์œ„ Stream

Reader, Writer ๋‘˜ ๋‹ค ๋ฌธ์ž ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค. ๊ด€๋ จ๋œ ๋ชจ๋“  ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ์€ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด ์ง„๋‹ค.
๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ž…์ถœ๋ ฅ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ Stream์ด๋‹ค.
์˜ค๋กœ์ง€ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด ํŠนํ™”๋˜์–ด์žˆ๋‹ค.


  • Reader / Writer - ๋ฌธ์ž ๋‹จ์œ„ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ์ตœ์ƒ์œ„ ์ž…์ถœ๋ ฅ Stream Class

โœ” ๋ฌธ์ž ๋‹จ์œ„ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ํ•˜์œ„ Stream Class

  • FileReader / FileWriter
  • InputStreamReader / OutputStreamWriter
  • PrintWriter
  • BufferedReader / BufferedWriter


โšก๋ณด์กฐ Stream

Stream์˜ ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ Stream (์†๋„ ํ–ฅ์ƒ, ๋ฐ์ดํ„ฐ ํฌ๋งท ๋“ฑ)

  • ํŠธ๋Ÿญ์— ์ง์„ ์‹ฃ๊ณ  ํ•œ๋ฒˆ์— ์˜ฎ๊ฒจ๋ฒ„๋ฆฌ๋Š” ๋Š๋‚Œ!
  1. ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜์—†๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•œ ํ›„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    ์˜ˆ -
    BufferedInputStream / BufferedOutputStream
//๋จผ์ € ๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑ
FileInputStream fis = new FileInputStream("text.txt");

//๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•ด์„œ ๋ณด์กฐ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑ
BufferedInputStream bis = new BufferedInputStream(fis);

//๋ณด์กฐ์ŠคํŠธ๋ฆผ์ธ BufferedInputStream์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค
bis.read();

//์ฝ”๋“œ ์ƒ์œผ๋กœ๋Š” BufferedInputStream์ด ์ž…๋ ฅ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ,
//์‹ค์ œ ์ž…๋ ฅ๊ธฐ๋Šฅ์€ FileInputStream์ด ์ œ๊ณตํ•˜๊ณ , BufferedInputStream์€ ๋ฒ„ํผ๋งŒ ์ œ๊ณตํ•œ๋‹ค.

๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ ์ž…์ถœ๋ ฅ๊ณผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ž…์ถœ๋ ฅ์˜ ์„ฑ๋Šฅ์ฐจ์ด๋Š” ์ƒ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

์ฐธ์กฐ - Java์˜ ์ •์„

profile
์˜ค๋ฅ˜๋ณด๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€