일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스 SQL
- 스프링
- 메서드
- DML
- 알고리즘
- 클래스
- 정보처리기사
- 정보처리기사필기요약
- MySQL
- 예외처리
- select
- 백준
- Java
- 백엔드
- 데이터 조회
- 프로그래머스 sql 고득점 kit
- SQL
- 프로그래밍
- String클래스
- 자바스크립트
- scanner
- select문
- order by
- 개발자
- 프론트엔드
- 입출력
- Git
- 웹개발
- BufferedReader
- JavaScript
- 자바
- github
- Linux
- where
- StringBuilder
- 형변환
- 리눅스
- sql문
- mybatis
- html
- Today
- Total
ToBe끝판왕
[ JAVA ] 입출력 / Scanner / BufferedReader / InputStream 본문
알고리즘 문제를 풀 때
시간제한이 걸려있는 문제들 관련해서
입출력 문제에 있어서 자주 언급되는 Scanner와 BufferedReader에 대해 정리해보려 한다.
Scanner 클래스
• java.util.Scanner ; ( import )
• 데이터형을 받기 편하다.
- 데이터 타입이 입력받는 시점에 결정되기 때문에 별도의 Casting 필요 X
- Scanner는 정수 값으로 int / short / long 읽어 들일 수 있다.
- Scanner는 소수 값으로 float / double 읽어 들일 수 있다.
- Scanner는 String값도 읽을 수 있다.
• 입력값의 경계로 공백 / 엔터 모두 인식 가능하다.
• 동기화되지 않는다.
• 정규식을 사용하여 문자열을 구분하여 분석하는 Parsing( 파싱 )이 가능하다.
- Scanner의 경우 int / long / short / float / double의 경우
nextInt( ) , nextLong( ) , nextShort( ).nextFloat( ) , nextDouble( )과 같은 함수를 사용하지만
BufferedReader는 오직 문자열 값만을 읽기 때문에 readLine( ) 함수만을 사용
ex)
import java.util.Scanner;
public class Study {
public static void main( String[] args ) {
Scanner sc = new Scanner( System.in );
String inpuit = sc.nextLine();
int num = Integer.parseInt( input );
System.out.println( num );
}
}
BufferedReader 클래스
• 일정한 크기의 데이터를 한 번에 읽어와 버퍼에 보관한 후, 사용자의 요청이 있을 때 버퍼에서
데이터를 읽어오는 방식으로 동작한다.
• java.io.BufferedReader; ( import )
• 데이터가 문자열로 먼저 저장되기 때문에 형 변환은 필수이다.
• 입력값이 엔터만 인식, 한 Line에 여러 가지 입력하고 싶다면 stringtokenize 필수이다.
• IOException( 예외처리 )를 던져야 한다.
• 입력과 동시에 동기화된다.
- 여러 스레드 간에 Scanner는 공유가 불가능하지만, BufferedReader는 공유할 수 있다.
ex)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Study {
public static void main( String[] args ) {
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
String Str = br.readLine();
int i = Integer.parseInt( br.readLine() );
System.out.println( "String : " + Str );
System.out.println( "Int : " + i );
}
}
※ InputStreamReader
- 가장 기본이 되는 입출력 클래스
- 가장 기본이 되는 입력 스트림으로 바이트 단위의 데이터를 보낸다.
InputStream의 입력 메서드인 read( )는 1byte 단위로 읽는다.
- 문자열을 Character 단위( 한 글자 단위 )로 읽어 들인다.
긴 문자열을 읽어 들일 때, 비효율적이므로 BufferedReader가 존재한다.
즉, BufferedReadr는 InputStreamReader에 버퍼링 기능이 추가된 클래스이다.
차이점
• 두 방식의 큰 차이는 바로 속도에 있다.
'■ 공부 기록 > 개념 정리' 카테고리의 다른 글
[ 개념 ] DIP ( Dependency Inversion Principle ) (5) | 2024.10.29 |
---|---|
[ JPA ] ORM의 개념 / 장단점 (0) | 2022.06.03 |
[ JAVA ] 문자열클래스 / String / StringBuffer / StringBuilder (0) | 2022.05.24 |
[ JAVA ] 문자열분리 / StringTokenizer 클래스 / Split( ) 메서드 (0) | 2022.05.19 |
[ JAVA ] Exception 개념 / 예외처리( try-catch문 ) (0) | 2022.05.17 |