Java BufferedReader

2023. 1. 31. 00:52Java

프로젝트 내 src 내 javabasic 패키지 내 Ex17Reader.java

package javabasic;

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

public class Ex17Reader {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String msg = null;
		InputStreamReader is = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(is);
		System.out.println("문자열 입력");
		try {
			msg = br.readLine();// 한줄을 읽는다
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(msg);
	}

}
문자열 입력
안녕하세요 무엇입니까? 이것은? 123
안녕하세요 무엇입니까? 이것은? 123

 

=================================================

 

InputStreamReader 는 byte 스트림에서부터 character 스트림까지를 이어주는 다리와 같다: InputStreamReader 는 bytes 를 읽고선 특정 charset을 사용하여 bytes 를 characters(문자) 로 복호화(해독) 한다. InputStreamReader 가 사용하는 charset 은 아마도 이름이 지정되 있거나 명시적으로 주어져 있을 수 있고, 또는 플랫폼의 기본적인 charset 이 사용될 수도 있다.

 

여러번 반복 수행되는 InputStreamReader 으 read() 메서드들 흐름 속에 각각 하나의 read() 메서드의 발동(호출) 은

하나 또는 그 이상의 bytes 가 근본적인 byte-입력 스트림으로부터 읽혀지게 만들 것이다. bytes 에서 문자로의 효율적인 변환이 가능해지도록, 더 많은 bytes 가 근본적인(기저의) 스트림으로부터 필요한 양보다 많이 미리 읽혀지게 할 수 있다. 그리하여 현재의 읽기 작업을 만족시킬 수 있다.

 

최고의 효율을 위해서, InputStreamReader를 BufferedReader 속에 감싸보는 것도 괜찮다.

 

==================================================

 

BufferedReader 는 character(문자)-입력 스트림에서 text를 읽어들일 때, characters(문자) 를 버퍼링(읽어들이는 데이타를 일시적으로 메모리의 어떤 영역인 버퍼에다가 보관하는 일)하며 읽어들인다, 그리하여 characters(문자), 배열, 그리고 줄을 효율적으로 읽을 수 있는 환경을 제공한다.

 

일반적으로, 한 Reader(읽기 장치)로 만들어진 각각의 읽기 요청은 그에 상응하는 읽기 요청이 근본적인 문자스트림이나 근본적인 byte 스트림으로 만들어지게 만든다. 그러므로 FileReaders 그리고 InputStreamReaders 와 같이 read() 작업에있어서 손실이 큰 아무 Reader 를 BufferedReader로 밖에서 감싸는 것을 권장한다. 

 

예를 들어서,

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
 

위와 같은 예는 특정 파일에서 온 입력을 버퍼할 것이다. 버퍼링 없이는, 각각의 read() 나 각각의 readLine() 의 호출이 파일로부터 bytes를 읽어오게 하고, bytes 가 문자로 변환되게 한 뒤 반환되게 할 수 있는데, 이게 매우 비효율적일 수 있다.

 

무엇이 비효율적이라는 것인지 이해가 안되어 찾는데 시간이 걸렸다.

 

====================================================

 

 

BufferedReader 는 Scanner 보다 속도 측면에서 훨 빠르다고 한다.

입력된 데이타가 바로 전달되지 않고 버퍼를 거쳐 전달이 되서 데이타 처리 효율성이 높아진다고 한다.

그리고 많은 양의 데이타를 처리할 때 유용하다.

 

하지만 BufferedReader 는 Enter, 즉 개행문자 만 구분자로 인식하고

반환하는 데이타가 String 으로 고정되므로 입력받은 데이타를 가공해야 할 때가 많다고 한다.

 

또, readLine() 메서드 사용할 때는 예외처리를 꼭 해줘야 한다. readLine 을 할 때마다 try 블록과 catch 블록을 사용해

예외처리를 해줘도 되나 대개 throws IOException 을 쓴다고 한다.

 

예외처리를 할 때는 

main(String[] args) 메서드 바로 다음에 쓰면 된다고 한다.

public static void main(String[] args) throws IOException { ... }

 

 

 

https://m.blog.naver.com/ka28/221850826909

 

[JAVA] BufferedReader 와 Bufferedwriter 사용법

BufferedReader :Scanner와 유사. Bufferedwriter :System.out.println();과 유사 둘은 모두 기존에 ...

blog.naver.com

 

 

 

https://rlakuku-program.tistory.com/33

 

[Java] 빠른 입출력을 위한 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder

BufferedReader / BufferedWriter BufferedReader와 BufferdWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은, 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달된다.

rlakuku-program.tistory.com

 

 

====================================

 

 

'Java' 카테고리의 다른 글

Java StringTokenizer  (0) 2023.01.31
Java FileReader  (0) 2023.01.31
Java System.in  (0) 2023.01.30
Java isDirectory()  (0) 2023.01.30
Java List 와 ArrayList  (0) 2023.01.30