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

[Java-๊ธฐ์ดˆ] ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 2. 23.
๋ฐ˜์‘ํ˜•

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

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

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

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

โ€‹

โ€‹

โ€‹

*FilterInputStream๊ณผ FilterOutputStream

FilterInputStream๊ณผ FilterOutputStream์€ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์˜ ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค. ๋ชจ๋“  ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ FilterInputStream์ด๋‚˜ FilterOutputStream์„ ์ƒ์†๋ฐ›๋Š”๋‹ค. ๋˜ํ•œ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ์ž๋ฃŒ ์ž…์ถœ๋ ฅ์„ ์ง์ ‘ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ํฌํ•จํ•œ๋‹ค.

์ƒ์„ฑ์ž

์„ค๋ช…

protected FilterInputStream(InputStream in)

์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ InputStream์„ ๋ฐ›๋Š”๋‹ค.

public FilterOutputStream(OutputStream out)

์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ OutputStream์„ ๋ฐ›๋Š”๋‹ค.

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

โ€‹

โ€‹

โ€‹

*InputStreamReader์™€ OutputStreamReader

byte ๋‹จ์œ„๋กœ ์ž๋ฃŒ๋ฅผ ์ฝ์œผ๋ฉด ํ•œ๊ธ€ ๊ฐ™์€ ๋ฌธ์ž๋Š” ๊นจ์ง„๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌธ์ž๋Š” Reader๊ณผ Writer์—์„œ ์ƒ์†๋ฐ›์€ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•ด์„œ ์ž๋ฃŒ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์จ์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ”์ดํŠธ ์ž๋ฃŒ๋งŒ ์ž…๋ ฅ๋˜๋Š” ์ŠคํŠธ๋ฆผ๋„ ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ํ‘œ์ค€ ์ž…์ถœ๋ ฅ System.in ์ŠคํŠธ๋ฆผ์ด๋‹ค. ๋˜ํ•œ ๋„คํŠธ์›Œํฌ์—์„œ ์†Œ์ผ“์ด๋‚˜ ์ธํ„ฐ๋„ท์ด ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๋•Œ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์ŠคํŠธ๋ฆผ์€ byte ๋‹จ์œ„์ธ InputStream๊ณผ OutputStream์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ byte ์ŠคํŠธ๋ฆผ์„ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด InputStreamReader์™€ OutputStreamReader์ด๋‹ค.

๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํฌํ•จํ•œ๋‹ค.

์ƒ์„ฑ์ž

์„ค๋ช…

InputStreamReader(InputStream in)

InputStream ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ Reader๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

InputStreamReader(InputStream in, Charset cs)

InputStream๊ณผ Charset ํด๋ž˜์Šค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ Reader๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

InputStreamReader(InputStream in, CharsetDecoder dec)

InputStream๊ณผ CharsetDecoder๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ Reader๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

InputStreamReader(InputStream in,

String charsetName)

InputStream String์œผ๋กœ ๋ฌธ์ž ์„ธํŠธ ์ด๋ฆ„์„ ๋ฐ›์•„ Reader๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

InputStreamReader ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ byte ์ŠคํŠธ๋ฆผ๊ณผ ๋ฌธ์ž ์„ธํŠธ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ž ์„ธํŠธ๋ž€ ๋ฌธ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ด๋‹ค. byte ์ž๋ฃŒ๊ฐ€ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋  ๋•Œ ์ง€์ •๋œ ๋ฌธ์ž ์„ธํŠธ๊ฐ€ ์ ์šฉ๋œ๋‹ค. ์ ์šฉํ•  ๋ฌธ์ž ์„ธํŠธ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ์Šคํ…œ์ด ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž ์„ธํŠธ๊ฐ€ ์ ์šฉ๋œ๋‹ค.

โ€‹

InputStreamReader์˜ ๋ชจ๋“  ์ƒ์„ฑ์ž๋Š” InputStream, ์ฆ‰ byte ๋‹จ์œ„๋กœ ์ฝ์–ด๋“ค์ด๋Š” ์ŠคํŠธ๋ฆผ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค. ์ƒ์„ฑ์ž์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ InputStream์ด ์ž๋ฃŒ๋ฅผ ์ฝ์œผ๋ฉด InputStreamReader๊ฐ€ ์ฝ์€ byte ์ž๋ฃŒ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

InputStream์ธ FileInputStream์„ ์‚ฌ์šฉํ•˜์—ฌ InputStreamReader๊ฐ€ ํ•ด์ฃผ๋Š” ๋ฌธ์ž ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์„ ์•Œ์•„๋ณด์ž.

โ€‹

โ€‹

InputStreamReaderTest.java

package stream.decorator;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamReaderTest {
	public static void main(String[] args) {
		try (InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))) { // ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ธ InputStreamReader์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์ธ FileInputStream์„ ๋ฐ›์•„ ์ƒ์„ฑํ•จ

			int i;
			while ((i = isr.read()) != -1) { // ํŒŒ์ผ์˜ ๋์ธ -1์ด ๋ฐ˜ํ™˜๋ ๋•Œ๊นŒ์ง€ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ž๋ฃŒ๋ฅผ ์ฝ์Œ
				System.out.print((char) i);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

<์‹คํ–‰ ๊ฒฐ๊ณผ>

โ€‹

โ€‹โ€‹

โ€‹

*Buffered ์ŠคํŠธ๋ฆผ

์ž…์ถœ๋ ฅ์ด ํ•œ byte๋‚˜ ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง€๋ฉด ๊ทธ๋งŒํผ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค. Buffered ์ŠคํŠธ๋ฆผ์€ ๋‚ด๋ถ€์ ์œผ๋กœ 8.192byte ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆผ์— ๋ฐฐ์—ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ๋” ๋น ๋ฅด๊ฒŒ ์ž…์ถœ๋ ฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค

์„ค๋ช…

BufferedInputStream

byte ๋‹จ์œ„๋กœ ์ฝ๋Š” ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

BufferedOutputStream

byte ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

BufferedReader

๋ฌธ์ž ๋‹จ์œ„๋กœ ์ฝ๋Š” ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

BufferedWriter

๋ฌธ์ž ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ŠคํŠธ๋ฆผ์— ๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

โ€‹

๋ฒ„ํผ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ŠคํŠธ๋ฆผ ์—ญ์‹œ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์„ ํฌํ•จํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ƒ์„ฑ์ž

์„ค๋ช…

BufferedInputStream(InputStream in)

InputStream ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ BufferedInputStream์„ ์ƒ์„ฑํ•œ๋‹ค.

BufferedInputStream(InputStream in, int size)

InputStream ํด๋ž˜์Šค์™€ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ BufferedInputStream์„ ์ƒ์„ฑํ•œ๋‹ค.

BufferedInputStream์€ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด๋ฏ€๋กœ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‹ค๋ฅธ InputStream์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

BufferedOutputStream์€ OutputStream์„, BufferedReader๋Š” Reader๋ฅผ, BufferedWriter๋Š” Writer ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

โ€‹

โ€‹

Buffered ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ๋น„๊ตํ•ด ๋ณด์ž.

(์ฑ…์—์„œ๋Š” zip ํŒŒ์ผ๋กœ ์‹ค์Šตํ•˜๋ผ๋Š”๋ฐ ์ œ์•ฝ์ด ๋งŽ์•„์„œ txt๋กœ ํ–ˆ์Œ.)

โ€‹

 

โ€‹

-FileInputStream๊ณผ FileOutputStream์œผ๋กœ ํŒŒ์ผ ๋ณต์‚ฌํ•˜๊ธฐ

 

1. ์›๋ณธ ํŒŒ์ผ a.txt์™€ ๋ณต์‚ฌํ•  ํŒŒ์ผ copy.txt์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

โ€‹

โ€‹

โ€‹

2. ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค

โ€‹

FileCopyTest.java

package stream.decorator;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileOutputStream;

public class FileCopyTest {
	public static void main(String[] args) {
		long millisecond = 0;
		try (FileInputStream fis = new FileInputStream("a.txt");
				FileOutputStream fos = new FileOutputStream("copy.txt")) {
			millisecond = System.currentTimeMillis(); // ํŒŒ์ผ ๋ณต์‚ฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์‹œ๊ฐ„
			int i;
			while ((i = fis.read()) != -1) {
				fos.write(i);
			}
			millisecond = System.currentTimeMillis() - millisecond; // ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๊ณ„์‚ฐ
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("ํŒŒ์ผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ " + millisecond + " milliseconds ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
	}
}

<์‹คํ–‰ ๊ฒฐ๊ณผ>

โ€‹

โ€‹โ€‹

3. ๋ณต์‚ฌ๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โ€‹

โ€‹โ€‹

โ€‹

-BufferedInputStream๊ณผ BufferedOutputStream์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๋ณต์‚ฌํ•˜๊ธฐ

โ€‹

BufferedStreamTest.java

package stream.decorator;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedStreamTest {
	public static void main(String[] args) {
		long millisecond = 0;
		try (FileInputStream fis = new FileInputStream("a.txt");
				FileOutputStream fos = new FileOutputStream("copy.txt");
				BufferedInputStream bis = new BufferedInputStream(fis);
				BufferedOutputStream bos = new BufferedOutputStream(fos)) {
			millisecond = System.currentTimeMillis();
			int i;
			while ((i = bis.read()) != -1) {
				bos.write(i);
			}
			millisecond = System.currentTimeMillis() - millisecond;
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("ํŒŒ์ผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ " + millisecond + " milliseconds ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
	}
}

<์‹คํ–‰ ๊ฒฐ๊ณผ>

-์šฉ๋Ÿ‰์ด ์ž‘์€ ํŒŒ์ผ๋กœ ์‹ค์Šตํ•œ๊ฑฐ๋ผ ์ฐจ์ด๊ฐ€ ๋ณ„๋กœ ์—†์ง€๋งŒ Buffered ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด ๋” ๋น ๋ฅด๋‹ค๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โ€‹

โ€‹โ€‹

โ€‹

*DataInputStream๊ณผ DataOutputStream

DataInputStream๊ณผ DataOutputStream๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ 0, 1 ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์ฝ๊ฑฐ๋‚˜ ์“ด๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ณด์กด๋œ๋‹ค.

์ƒ์„ฑ์ž

์„ค๋ช…

DataInputStream(InputStream in)

InputStream์„ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„

DataInputStream์„ ์ƒ์„ฑํ•œ๋‹ค.

DataOutputStream(OutputStream out)

OutputStream์„ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„

DataOutputStream์„ ์ƒ์„ฑํ•œ๋‹ค.

โ€‹

โ€‹

โ€‹

*์ž๋ฃŒํ˜•๋ณ„ ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ

์„ค๋ช…

byte readByte( )

1๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

boolean readBoolean( )

์ฝ์€ ์ž๋ฃŒ๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด true๋ฅผ, 0์ด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

char readChar( )

ํ•œ ๋ฌธ์ž๋ฅผ ์ฝ์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

short readShort( )

2๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ์ •์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

int readInt( )

4๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ์ •์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

long readLong( )

8๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ์ •์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

float readFloat( )

4๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ์‹ค์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

double readDouble( )

8๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ์‹ค์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

String readUTF( )

์ˆ˜์ •๋œ UTF-8 ์ธ์ฝ”๋”ฉ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ฝ์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

โ€‹

โ€‹

โ€‹

*๊ฐ ์ž๋ฃŒํ˜•๋ณ„๋กœ read( ) ์— ๋Œ€์‘ํ•˜๋Š” write( ) ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ

์„ค๋ช…

void writeByte(int v)

1๋ฐ”์ดํŠธ์˜ ์ž๋ฃŒ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeBoolean(boolean v)

1๋ฐ”์ดํŠธ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

void writeChar(int v)

2๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeShort(int v)

2๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeInt(int v)

4๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeLong(long v)

8๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeFloat(float v)

4๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeDouble(double v)

8๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

void writeUTF(String str)

์ˆ˜์ •๋œ UTF-8 ์ธ์ฝ”๋”ฉ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

โ€‹์ž๋ฃŒํ˜•์„ ๊ทธ๋Œ€๋กœ ์ฝ๊ณ  ์“ฐ๋Š” ์ŠคํŠธ๋ฆผ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์ •์ˆ˜๋ผ๋„ ์ž๋ฃŒํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ž๋ฃŒ๋ฅผ ์“ธ ๋•Œ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ๋ฉ”์„œ๋“œ๋กœ ์ฝ์–ด์•ผ ํ•œ๋‹ค. ๋˜ ํŒŒ์ผ์ด๋“  ๋„คํŠธ์›Œํฌ๋“  ์ž๋ฃŒ๋ฅผ ์“ธ ๋•Œ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์–ด์•ผ ํ•œ๋‹ค.

โ€‹

โ€‹

โ€‹

*ํŒŒ์ผ์— ์—ฌ๋Ÿฌ ์ž๋ฃŒํ˜• ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์˜ˆ์ œ

์ž๋ฃŒํ˜•์„ ์œ ์ง€ํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด DataInputStream๊ณผ DataOutputStream์„ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

โ€‹

DataStreamTest.java

package stream.decorator;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamTest {
	public static void main(String[] args) {
		try (FileOutputStream fos = new FileOutputStream("data.txt");
				DataOutputStream dos = new DataOutputStream(fos)) {
			dos.writeByte(100);
			dos.writeChar('A');
			dos.writeInt(10);
			dos.writeFloat(3.14f);
			dos.writeUTF("Test");
		} catch (IOException e) {
			e.printStackTrace();
		}
		try (FileInputStream fis = new FileInputStream("data.txt"); 
				DataInputStream dis = new DataInputStream(fis)) {
			System.out.println(dis.readByte());
			System.out.println(dis.readChar());
			System.out.println(dis.readInt());
			System.out.println(dis.readFloat());
			System.out.println(dis.readUTF());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

<์‹คํ–‰ ๊ฒฐ๊ณผ>

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€