๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

Java BufferedReader์™€ BufferedWriter ์‚ฌ์šฉ๋ฒ•๊ณผ ๊ธฐ๋ณธ์›๋ฆฌ(I/O) ๋ณธ๋ฌธ

Study/Java

Java BufferedReader์™€ BufferedWriter ์‚ฌ์šฉ๋ฒ•๊ณผ ๊ธฐ๋ณธ์›๋ฆฌ(I/O)

Shinjio 2023. 11. 6. 22:28

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋น ๋ฅธ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•ด BufferedReader์™€ BufferedWriter๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ์—๋Š” ์ง์ ‘ ์ž…์ถœ๋ ฅ์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์•Œ๋˜ Scanner์™€ System.out.print()๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ BufferedReader์™€ BufferedWriter๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์•„ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•œ๋‹ค. 

์ž๋ฐ”์—์„œ์˜ ์ž…์ถœ๋ ฅ(I/O)


I/O๋ž€ Input๊ณผ Output์˜ ์•ฝ์ž๋กœ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ, ์ฆ‰ ์ž…์ถœ๋ ฅ์„ ๋งํ•œ๋‹ค. ์ž…์ถœ๋ ฅ์ด๋ž€, ์ปดํ“จํ„ฐ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€์˜ ์žฅ์น˜์™€ ํ”„๋กœ๊ทธ๋žจ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ ํ‚ค๋ณด๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ž…์ถœ๋ ฅ์˜ ์˜ˆ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

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


์ž๋ฐ”์—์„œ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๋Œ€์ƒ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” '์ŠคํŠธ๋ฆผ(Stream)'์ด ํ•„์š”ํ•˜๋‹ค. 

์ŠคํŠธ๋ฆผ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ๊ฒฐํ†ต๋กœ

 

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

 

์ŠคํŠธ๋ฆผ์€ ๋จผ์ œ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑด๋„ˆ๋œ€ ์—†์ด ๋จผ์ € ๋ฐ›๋Š” 'ํ(queue)'์™€ ๊ฐ™์€ 'FIFO' ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. 

 

๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ - InputStream, OutputStream


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

 

์ž…๋ ฅ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ ์ž…์ถœ๋ ฅ ๋Œ€์ƒ
FileInputStream FileOutputStream ํŒŒ์ผ
ByteArrayInputStream ByteArrayOutputStream ๋ฉ”๋ชจ๋ฆฌ(byte๋ฐฐ์—ด)
PipedInputStream PipedOutputStream ํ”„๋กœ์„ธ์Šค(ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ )
AudioInputStream AudioOutputStream ์˜ค๋””์˜ค ์žฅ์น˜

 

 

์œ„์˜ ์ŠคํŠธ๋ฆผ ์™ธ์—๋„ ์ŠคํŠธ๋ฆผ์˜ ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์กฐ์ŠคํŠธ๋ฆผ์ด ์ œ๊ณต๋œ๋‹ค. 

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

 

์ž…๋ ฅ ์ถœ๋ ฅ ์„ค๋ช…
FilterInputStream FilterOutputStream ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ
BufferedInputStream BufferedOutputStream ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ ์„ฑ๋Šฅ ํ–ฅ์ƒ
DataInputStream DataOutputStream int, float์™€ ๊ฐ™์€ ๊ธฐ๋ณธํ˜• ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ
SequencedIntputStream ์—†์Œ ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์„ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐ
LineNumberInputStream ์—†์Œ ์ฝ์–ด ์˜จ ๋ฐ์ดํ„ฐ์˜ ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์นด์šดํŠธ
(JDK1.1๋ถ€ํ„ฐ LineNumberReader๋กœ ๋Œ€์ฒด)
ObjectInputStream ObjectOutputStream ๋ฐ์ดํ„ธ๋ฅด ๊ฐ์ฒด ๋‹จ์œ„๋กœ ์ฝ๊ณ  ์“ฐ๋Š”๋ฐ ์‚ฌ์šฉ. ์ฃผ๋กœ ํŒŒ์ผ์„ ์ด์šฉํ•˜๋ฉฐ ๊ฐ์ฒด ์ง๋ ฌํ™”์™€ ๊ด€๋ จ ์žˆ์Œ
์—†์Œ PrintStream ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ print ๊ด€๋ จ ๊ธฐ๋Šฅ(print, printf, println)
PushbackInputStream ์—†์Œ ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ์–ด ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ
๋˜๋Œ๋ฆฌ๋Š” ๊ธฐ๋Šฅ

 

๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ - Reader, Writer


Java์—์„œ๋Š” ํ•œ ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๋Š” charํ˜•์ด ๋‹จ์œ„๋Š” 2byte์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ 2byte์ธ ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ์ด๋‹ค. ๋ฌธ์ž๋ฐ์ดํ„ฐ๋ฅผ ์ž…์ถœ๋ ฅํ•  ๋•Œ์—๋Š” ๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ๋Œ€์‹  ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ ๋ฌธ์ž๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ
FileInputStream
FileOutputStream
FileReader
FileWriter
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
PipedInputStream
PipedOutputStream
PipedReader
PipedWriter
StringBufferedInputStream(์ง€๊ธˆ์€ X)
StringBufferedOutputStream (์ง€๊ธˆ์€ X)
StringReader
StringWriter

 

 

๋ฌธ์ž ๊ธฐ๋ฐ˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์—ญ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ์กด์žฌํ•œ๋‹ค. 

 

๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜ ๋ณด์กฐ์ŠคํŠธ๋ฆผ ๋ฌธ์ž๊ธฐ๋ฐ˜ ๋ณด์กฐ์ŠคํŠธ๋ฆผ
BufferedInputStream
BufferedOutputStream
BufferdReader
BufferedWriter
FilterInputStream
FilterOutputStream
FilterReader
FilterWriter
LineNumberInputStream LineNumberReader
PrintStream PrintWriter
PushbackInputStream PushbackReader

 

BufferedReader, BufferedWriter


๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•ด ์ž…์ถœ๋ ฅ์˜ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 

ํ•œ ๋ฐ”์ดํŠธ์”ฉ ์ž…์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ๋ฒ„ํผ(๋ฐ”์ดํŠธ ๋ฐฐ์—ด)๋ฅผ ์ด์šฉํ•ด์„œ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ๋ฅผ ์ž…์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

๋ฒ„ํผ(Buffer) 
์ž„์‹œ ์ €์žฅ ๊ณต๊ฐ„
๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ž ์‹œ ์ €์žฅํ•ด๋†“๊ณ  ๋ฒ„ํผ๊ฐ€ ๊ฝ‰ ์ฐจ๊ฑฐ๋‚˜, ํŠน์ • ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•˜์„ ๋•Œ ์ผ๊ด„์ ์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ , ๋ฒ„ํผ๋ฅผ ์ดˆ๊ธฐํ™” ์‹œํ‚ด (๋ฒ„ํผ๋Š” ๋””ํดํŠธ๋กœ 8192๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ €์žฅ)

 

 

์ถœ์ฒ˜ : https://terianp.tistory.com/19

 

 

BufferedReader๋ฅผ ํ™œ์šฉํ•œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ์˜ˆ์‹œ์ด๋‹ค. 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class BufferedReaderEx {

	public static void main(String[] args) {
		String line = "";
		
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
			
			do {
				bw.write("๋ฌธ์žฅ์„ ์ž…๋ ฅํ•˜์„ธ์š”. ๋งˆ์น˜์‹œ๋ ค๋ฉด q๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.>");
				bw.flush();
				line = br.readLine();

				bw.write("์ž…๋ ฅํ•˜์‹  ๋ฌธ์žฅ : " + line);
				bw.newLine();
				bw.flush();
			}while(!line.equalsIgnoreCase("q"));
			br.close();
			bw.write("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ");
			bw.flush();
			
		}catch(IOException e) {}
	}
}

 

์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • try ~ catch ํ˜น์€ thows๋ฅผ ํ™œ์šฉํ•˜์—ฌ IOException์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 
  • InputStreamReader, OutputStreamWriter๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ๋ฌธ์ž๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ์˜ ๋ฌธ์ž๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

Q. BufferedReader์™€ BufferedWriter๋Š” ๋ฌธ์ž๊ธฐ๋ฐ˜์˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ธ๋ฐ ์–ด๋–ป๊ฒŒ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ณด์กฐ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

ํ‘œ์ค€ ์ž…์ถœ๋ ฅ - System.in, System.out

ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์€ ์ฝ˜์†”์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ์ฝ˜์†”๋กœ์˜ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์„ ์˜๋ฏธํ•œ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” ํ‘œ์ค€ ์ž…์ถœ๋ ฅ(standard I/O)์„ 3๊ฐ€์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ(System.in, System.out, System.err)๋กœ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด๋“ค์€ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰๊ณผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

์ฆ‰, System.in์€ ํ‘œ์ค€ InputStream, System.out์€ ํ‘œ์ค€ OutputStream โ–ถ System.in๊ณผ System.out์„ ํ†ตํ•ด ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ–ˆ์Œ!

 

Q. InputStreamReader์™€ OutputStreamReader๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

InputStream์˜ ํŠน์ง• 
1. ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” intํ˜•์œผ๋กœ ์ €์žฅ๋˜๋Š”๋ฐ ์ด๋Š” 10์ง„์ˆ˜์˜ UTF-16 ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ๋‹ค. 
2. 1byte๋งŒ ์ฝ๋Š”๋‹ค. 

 

InputStream์€ ์šฐ๋ฆฌ๊ฐ€ InputStream.read()๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ ค๊ณ  ํ•ด๋„ 1byte๋งŒ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ธ€์€ ์ œ๋Œ€๋กœ ์ฝ์ง€ ๋ชปํ•œ๋‹ค. ์ด ๋ฌธ์ž๋ฅผ ์˜จ์ „ํ•˜๊ฒŒ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด ํ™•์žฅํ•œ ๊ฒƒ์ด 'InputStreamReader'์ด๋‹ค. 

InputStreamReader๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฝ์–ด๋“ค์ด๋Š” ํ˜•์‹์„ ๋ฌธ์ž ๋‹จ์œ„(character)๋กœ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•œ๋‹ค. 

 

๊ฒฐ๋ก 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

System.in์€ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์ธ InputStream ํƒ€์ž…์ด๊ณ  ์ธ์ฝ”๋”ฉ์„ ์œ„ํ•ด InputStreamReader๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด์„œ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋˜ํ•œ, BufferReader๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ๋ฐ›์€ ๋ฌธ์ž(char)๋ฅผ ์Œ“์•„๋‘” ๋’ค ํ•œ๋ฒˆ์— ๋ฌธ์ž์—ด(String) ๋‹จ์œ„๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

BufferedReader์™€ BufferedWriter ๋‹จ์ 


1. ๋„์–ด์“ฐ๊ธฐ(์ŠคํŽ˜์ด์Šค)์™€ ๊ฐœํ–‰(์—”ํ„ฐ)๋ฅผ ๊ฒฝ๊ณ„๋กœ ์ž…๋ ฅ ๊ฐ’์„ ์ธ์‹ํ•˜๋Š” Scanner์™€ ๋‹ฌ๋ฆฌ BufferedReader๋Š” ์—”ํ„ฐ๋งŒ ๊ฒฝ๊ณ„๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ๋„์–ด์“ฐ๊ธฐ๋กœ ๊ตฌ๋ถ„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

2. Buffer๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์€ String์ด๋ฏ€๋กœ int๋กœ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

BufferedReader์™€ BufferedWriter ํด๋ž˜์Šค์˜ ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ


BufferedReader

(void) close() : ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์Œ

(void) mark() : ์ŠคํŠธ๋ฆผ์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋งˆํ‚นํ•จ

(boolean) markSupported() : ์ŠคํŠธ๋ฆผ์ด mark ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š”์ง€ true/false๋กœ ์•Œ๋ ค์คŒ

(int) read() : ํ•œ ๊ธ€์ž๋งŒ ์ฝ์–ด ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜

(String) readLine(): ํ•œ ์ค„์„ ์ฝ์–ด String์œผ๋กœ ๋ณ€ํ™˜

(boolean) ready() : ์ž…๋ ฅ์ŠคํŠธ๋ฆผ์ด ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

(void) reset() : ๋งˆํ‚น์ด ์žˆ์œผ๋ฉด ๊ทธ ์œ„์น˜๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘

(long) skip(long n) : n๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ๊ฑด๋„ˆ๋œ€

 

BufferedWriter

(void) close() : ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์Œ. ๋‹ซ๊ธฐ ์ „์— flush() ํ•„์ˆ˜

(void) flush() : ๋ฒ„ํผ์— ๋‚จ์€ ๊ฐ’ ์ถœ๋ ฅ && ์ŠคํŠธ๋ฆผ ๋น„์šฐ๊ธฐ

(void) newLine(): ๊ฐœํ–‰0

(void) write(char[] cbuf, int offset, int length) : ๋ฒ„ํผ offset์œ„์น˜๋ถ€ํ„ฐ lengthํฌ๊ธฐ๋งŒํผ write ์“ฐ๊ธฐ

(void) write(int c) : ํ•œ ๊ธ€์ž ์“ฐ๊ธฐ

(void) write(String s, int offset, int length) : ๋ฌธ์ž์—ด์—์„œ offset๋ถ€ํ„ฐ ์ผ์ • ๊ธธ์ด๋งŒํผ ์“ฐ๊ธฐ

 

 

์ฝ”๋”ฉ์‹œ ์‚ฌ์šฉํ•˜๋Š” write๋ฉ”์†Œ๋“œ๋Š” Writer๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ ๋ฉ”์†Œ๋“œ

 

Q. write(int c)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ–ˆ์œผ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

์ถœ์ฒ˜ : https://www.acmicpc.net/board/view/85404

 


 

์ด๋ ‡๊ฒŒ ์˜ค๋Š˜์€ BufferedWriter์™€ BufferedReader์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๊ณต๋ถ€ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ทธ๋ƒฅ ์‚ฌ์šฉ๋ฐฉ๋ฒ•๋งŒ ๋ณด๊ณ  ์“ฐ๋Š๋ผ ์–ธ์ œ flush()๋ฅผ ์จ์•ผํ•˜๋Š”์ง€, ์™œ ์ด๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ๋˜๋Š”์ง€ ์ „ํ˜€ ๋ชฐ๋ž์—ˆ๋Š”๋ฐ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ๋‚˜๋‹ˆ ์–ด๋–ป๊ฒŒ ์จ์•ผํ•  ์ง€ ๊ฐ์ด ์žกํ˜”๋‹ค. ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋“ค์„ ๋ณด๋ฉด์„œ ์ž๋ฐ”์˜ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์€ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๊ณ„์† ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค ๋‹ค์‹œ ๋ณด๊ฒŒ๋˜๋ฉด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•œ๋‹ค. 

 

์ฐธ๊ณ ๋ฌธํ—Œ


  • ์ž๋ฐ”์˜ ์ •์„ (๋‚จ๊ถ์„ฑ)
 

Java ์ž…์ถœ๋ ฅ(I/O), ์ŠคํŠธ๋ฆผ(Stream), ๋ฒ„ํผ(Buffer) ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ•

์ตœ๊ทผ ๋ฐฑ์ค€์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ Buffer ์™€ ๊ด€๋ จํ•œ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์‚ฌ์‹ค ์ง€๊ธˆ๊นŒ์ง€ Buffer์— ๋Œ€ํ•ด์„œ ์ •๋ง ํ•˜๋‚˜๋„ ๋ชฐ๋ž๊ณ , Scanner ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ณ  println ์„ ํ†ตํ•ด ์ถœ๋ ฅํ•˜๊ธฐ๋งŒ ํ–ˆ์—ˆ๋˜์ง€๋ผ ์ด

terianp.tistory.com

 

 

JAVA [์ž๋ฐ”] - ์ž…๋ ฅ ๋œฏ์–ด๋ณด๊ธฐ [Scanner, InputStream, BufferedReader]

์ด ๊ธ€์„ ์ง€๊ธˆ ์ด ์‹œ์ ์— ์จ์•ผ ํ• ๊นŒ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค. ์‚ฌ์‹ค ์ž๋ฐ”๋ฅผ ๊ทธ๋ƒฅ ๋‹ค๋ฃฐ ์ค„๋งŒ ์•„๋Š” ๊ฒƒ์— ๋ชฉํ‘œ๋ฅผ ๋‘”๋‹ค๋ฉด ์ด ๊ธ€์ด ๋ฌด์˜๋ฏธํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž๋ฐ”์— ๋Œ€ํ•ด ์กฐ๊ธˆ์ด๋ผ๋„ ๊ด€์‹ฌ์ด ์žˆ๊ณ  ๋” ๋ฐฐ์šฐ๊ณ 

st-lab.tistory.com

 

 

JAVA - BufferedReader / BufferedWriter (์ž…์ถœ๋ ฅ ํ•จ์ˆ˜)

โ–  BufferedReader / BufferedWriter - Buffer์— ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ํ•œ๋ฒˆ์— ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„,ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค. - ๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2741๋ฒˆ ๋ฌธ์ œ๋ฅผ Scanner์™€ BufferedReader๋กœ ์ฝ”๋”ฉ์‹œ Scanner(696ms) / Bu

kimby.tistory.com