๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] I/O Stream

์ถœ์ฒ˜

https://blog.naver.com/jwyoon25/221300691133

 

์ž๋ฐ” ์ŠคํŠธ๋ฆผ API์™€ I/O

'์ž๋ฐ” ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์˜ ๋‹ค์Œ ์ฑ•ํ„ฐ๋Š” ์ŠคํŠธ๋ฆผ(stream)์ด๋‹ค. ์ž๋ฐ”์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋™์ž‘, ์ฆ‰ ...

blog.naver.com

 

Head First Java

ChatGPT

https://www.geeksforgeeks.org/java-io-tutorial/

 

Java IO Tutorial - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://introvertreader.medium.com/mastering-java-io-streams-a-comprehensive-guide-part-1-9a6bec3035ac

 

Mastering Java I/O Streams — Part 1: An Introduction

An Introduction to Java IO

introvertreader.medium.com

 


์ŠคํŠธ๋ฆผ์ด๋ž€

๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด๋ผ๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…. -> ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์„œ ์˜ค๋Š”์ง€ ์•Œ ํ•„์š” ์—†์ด ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ๋กœ

 

์ŠคํŠธ๋ฆผ ํ•ต์‹ฌ ๊ฐœ๋…

1. ๋ฐ์ดํ„ฐ์˜ ์—ฐ์†์ ์ธ ํ๋ฆ„

์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ํ๋ฅด๋Š” ํ†ต๋กœ์™€ ๊ฐ™์œผ๋ฉฐ, ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์™ธ๋ถ€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์™ธ๋ถ€์˜ ๋ชฉ์ ์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

 

๐Ÿค” ์™œ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ „๋‹ฌํ• ๊นŒ? -> ์ŠคํŠธ๋ฆผ์˜ ์žฅ์ 

1. ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์„ฑ

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

2. ์ถ”์ƒํ™”๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

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

3. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ์„ฑ

์ŠคํŠธ๋ฆผ์€ ๋น„๋™๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•˜๋‹ค. ํŠนํžˆ ๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ๋Š ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ๋•Œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์‹œ์Šคํ…œ์˜ ์‘๋‹ต์„ฑ๊ณผ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

2. ๋‹จ๋ฐฉํ–ฅ์„ฑ

์ž๋ฐ” ์ŠคํŠธ๋ฆผ์€ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ์˜ ์–ด๋Š ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋™์ž‘ํ•œ๋‹ค. ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์ฝ๊ธฐ ์ „์šฉ์ด๊ณ , ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์“ฐ๊ธฐ ์ „์šฉ์ด๋‹ค.

๐Ÿค” ์™œ ์ŠคํŠธ๋ฆผ์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋งŒ๋“ค์—ˆ์„๊นŒ?

๋‹จ์ˆœ์„ฑ๊ณผ ์ž…์ถœ๋ ฅ ์ž‘์—…์˜ ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ ๋•Œ๋ฌธ์ด๋‹ค.

 

1. ๋‹จ์ˆœ์„ฑ Simplicity

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

2. ํšจ์œจ์ ์ธ ์ž์› ๊ด€๋ฆฌ Resource Efficiency

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

3. I/O์˜ ์ „ํ†ต์ ์ธ ํŠน์„ฑ

  • ๋Œ€๋ถ€๋ถ„์˜ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋Š” ์ „ํ†ต์ ์œผ๋กœ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ์ด๋ฅผ ๋ฐ˜์˜ํ•ด ์ „ํ†ต์ ์ธ ์ž…์ถœ๋ ฅ ์ž‘์—…๊ณผ ์ž˜ ๋งž๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.
    • ํ”„๋ฆฐํ„ฐ - ์ปดํ“จํ„ฐ์—์„œ ํ”„๋ฆฐํ„ฐ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅธ๋‹ค.
    • ๋งˆ์ดํฌ - ์†Œ๋ฆฌ๋ฅผ ์ปดํ“จํ„ฐ๋กœ ์ž…๋ ฅํ•œ๋‹ค.
    • ์Šคํ”ผ์ปค - ์ปดํ“จํ„ฐ์—์„œ ์ถœ๋ ฅ๋œ ์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

4. ๋ฐ์ดํ„ฐ ์ˆœ์ฐจ ์ฒ˜๋ฆฌ์˜ ์šฉ์ด์„ฑ

  • ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ  ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋‹ค. 

5. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์•ˆ์ „์„ฑ

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

3. ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๋ฐ์ดํ„ฐ ์‹ฑํฌ์˜ ์—ฐ๊ฒฐ

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

4. ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ vs ๋ฌธ์ž ์ŠคํŠธ๋ฆผ

์ž๋ฐ”์—์„œ๋Š” ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ(InputStream, OutputStream)๊ณผ ๋ฌธ์ œ ์ŠคํŠธ๋ฆผ(Reader, Writer)์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์€ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ , ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋‹ค.

5. ์ถ”์ƒํ™”์™€ ํ•„ํ„ฐ๋ง

์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ์˜ ์„ธ๋ถ€์ ์ธ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ณผ์ •์„ ์ถ”์ƒํ™”ํ•˜์—ฌ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ŠคํŠธ๋ฆผ์œผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋” ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

์ž๋ฐ”์—์„œ๋Š” ํ•„ํ„ฐ ์ŠคํŠธ๋ฆผ(BuggeredInputStream, BuggerdWiter)์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ž‘์—…(์˜ˆ : ์••์ถ•, ์•”ํ˜ธํ™”)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.

 

์ŠคํŠธ๋ฆผ์˜ ๊ตฌ๋ถ„

1. ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ Input Stream & ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ Output Stream

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ  Input Stream

  • ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค

์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ  Output Stream

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€์— ์“ด๋‹ค.

2. ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ Byte Stream & ๋ฌธ์ž ์ŠคํŠธ๋ฆผ character Stream

๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ Byte Stream

  • 8๋น„ํŠธ ๋ฐ”์ดํŠธ์˜ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์€ InputStream, ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ OutputStream ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ๋ฐ”์ดํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. 

๋ฌธ์ž ์ŠคํŠธ๋ฆผ Character Stream

  • 16๋น„ํŠธ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. 
  • ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์€ ์ถ”์ƒ ํด๋ž˜์Šค Redaer์™€ Wiriter๊ฐ€ ๋ฌธ์ž ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

3. ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ Connection Stream & ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ Chain Stream

์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ Connection Stream

  • ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“ ๋“ฑ)์™€ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด ์ง์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์ด ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜, ๊ทธ ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ์ž๋ฐ”์—์„œ ๋Œ€ํ‘œ์ ์ธ ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ์€ FileInputStream, FileOutputStream, SocketInputStream, SocketOutputStream ๋“ฑ์ด ์žˆ๋‹ค.
  • ์ด ์ŠคํŠธ๋ฆฌ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ์™€์˜ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์—ฐ์‡„ ์ŠคํŠธ๋ฆผ Chain Stream

  • ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ, ๋˜๋Š” ํ•„ํ„ฐ ์ŠคํŠธ๋ฆผ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ด ์ŠคํŠธ๋ฆผ์€ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์— ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•œ๋‹ค.
  • ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ์€ ์ง์ ‘ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์ง€๋งŒ, ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ ์œ„์— ๊ธฐ๋Šฅ์„ ๋ง๋ถ™์ด๋Š” ํ˜•ํƒœ๋„ ์ž‘๋™ํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ„ํผ๋ง, ์••์ถ•, ์ธ์ฝ”๋”ฉ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ”์—์„œ BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputStream, ObjectInputStream, ObjectOutputStream ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, BufferedInputStream์€ FileInputStream์— ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค.

์˜ˆ์‹œ : ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ์˜ ์กฐํ•ฉ

FileInputStream fileInputStream = new FileInputStream("data.txt"); // ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); // ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ

 

์œ„์˜ ์˜ˆ์‹œ์—์„œ FileInputStream์€ ์‹ค์ œ ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋œ ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ, ํŒŒ์ผ์—์„œ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. BufferdInputStream์€ ์ด FileInputStream์— ์—ฐ๊ฒฐ๋œ ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•ด ๋” ํšจ์œจ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

๐Ÿค” ์™œ ์—ฐ๊ฒฐ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ์„ ๋‚˜๋ˆด์„๊นŒ

๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์”ฉ์˜ ๊ธฐ๋Šฅ๋งŒ ๋‹ด๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

๋‹ค์–‘ํ•œ ์—ฐ๊ฒฐ ๋ฐ ์—ฐ์‡„ ์ŠคํŠธ๋ฆผ์„ ์กฐํ•ฉํ•ด ์œ ์—ฐํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.