Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

Mintaka's log

[Java]I/O 공부 본문

JAVA

[Java]I/O 공부

_해랑 2022. 12. 5. 17:20

 

입력

System.in.read

//이렇게 쓰거나
byte[] numArray = {0, 0, 0}
System.in.read(numArray);

//이렇게 쓰거나
int a = System.in.read();
  • 1byte 씩 읽어서 아스키 코드 10진수로 나타냄. -> 한글 인식 당연히 안됨.
  • 엔터, 스페이스도 저장됨.
    • 알고리즘 할 때는 system.in.read 하나로 crlf를 받더니 eclipse에서 할 때는 cr과 lf가 따로 출력되었음.
  • 예외처리 해주어야 함.
  • 따라서 해당 메소드 안에 배열을 넣는다면 byte[] 밖에 안됨.
  • in은 InputStream의 변수라고 함.

InputstreamReader

InputSteamReader ir = new InputStreamReader(System.in);
int a = ir.read(); 		//이렇게 하면 1byte로 읽어옴.
				//char로 읽고 싶으면 char 배열을 써서 넣어주어야 함.
  • inputstream이 문자를 제대로 못 읽어오니까(1byte만 읽으니까) 확장시킴.
  • char 단위로 읽음.
  • 즉, 알아보기 쉬운 InputStream과의 차이는 한글이 입력되는지 아닌지. 한글은 2byte라서 InputStream에서는 입력이 안된다.

다음 더보기는 InputStream (그러니까 System.in 사용) , InputStreamReader 사용 차이

더보기

둘의 차이는 안에 char 배열이 들어갈 수 있느냐 없느냐 밖에 확인하지 못했다.

InputStreamReader를 char로 변환시키는 것도 추가가 되었는데 이건 확인하지 못함. (아니 inputstream에서도 앞에 char 쓰면 형변환 당연히 되잖아... 이걸 의미하는게 아닌가?)

그래서 용법은 다음과 같음.

 

InputStream의 경우에는

InputStream is = System.in;

byte[] b = new byte[2];
is.read(b);

for(byte val : b) {
    System.out.println(val);			
}

 

 

InputStreamReader의 경우에는

InputStreamReader ir = new InputStreamReader(System.in);

char[] c = new char[2];
ir.read(c);

for(char val : c) {
    System.out.println(val);			
}

 

BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
  • inputstreamreader에서 버퍼 추가.
  • String으로 반환.

 

  • StringTokenizer
    • BufferedReader로 받아온 string 값 쪼갤 때 사용
    • 구분자 (밑의 예시에서 "하") 생략시 공백이 구분자가 됨
    • nextToken( ) 메소드를 통해 입력받은 값을 공백 기준으로 구분해 호출 가능
    • 이거 대신 String.split()을 사용해도 string을 쪼갤 수 있음->대신 여기는 정규식을 사용해야함.
String a = "안녕하세요";
StringTokenizer s = new StringTokenizer(a, "하");

int num = s.countTokens();	//for문 때문에 넣어줌

for(int i = 0; i < num; i++ ) {
    String b = s.nextToken();
    System.out.println(b);
}

//출력
안녕
세요
  •  StringBuilder
    • String은 한 번 생성시 내용 수정이 안되지만 StringBuilder는 가능 
      • 수정이 안된다는건 새롭게 할당은 되지만(기존에 있는걸 버리고) 기존거에 접근해 변경이 안된다는 의미.
      • 따라서 string을 연산할 때마다 새로운 string이 생성(?) 되므로 string의 수가 증가... 성능 느려지므로 stringbuilder (혹은 stringbuffer)를 쓰는게 좋다고 함.
    • .append("문자열")로 문자열 넣고 .toString()으로 문자열 출력
    • 엔터를 넣고싶다면 \n을 넣자.
StringBuilder sb = new StringBuilder();
sb.append("가나다");
sb.append("\n");
sb.append("라마바");
System.out.println(sb.toString());

//출력
가나다
라마바

 


 

Scanner

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
  • .next어쩌고 메소드로 읽어올 것을 결정.
  • 정규식이 많아서 느리고 성능이 좋지 않음.

 

 

 

 

 

다음은 보고 참고한 포스팅들.

https://makemethink.tistory.com/170

 

[Java] 콘솔 입력 - InputStream, BufferedReader, Scanner

하던 일만 하다 보면 범위 밖에 있는 기초적인 내용은 어느새 잊어버리게 됩니다. 이번에는 Stream으로 입력을 받아오려다 크게 헤매서 정리해보려고 합니다. 1. InputStream 1996년 JDK 1.0에서 도입된

makemethink.tistory.com

https://st-lab.tistory.com/41

 

JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader]

이 글을 지금 이 시점에 써야 할까 고민을 많이 했다. 사실 자바를 그냥 다룰 줄만 아는 것에 목표를 둔다면 이 글이 무의미할 수도 있다. 그러나 자바에 대해 조금이라도 관심이 있고 더 배우고

st-lab.tistory.com


 

출력

System.out.println();

한 줄 출력

 

 

위의 것보다 stringbuilder 사용하는게 더 빠름....

 

bufferedwriter?

'JAVA' 카테고리의 다른 글

[JAVA]""랑 null (BufferedReader로 EOF 처리)  (0) 2022.12.05
[JAVA] 접근 제어자- public / protected / default / private  (0) 2022.05.26
[JAVA] static, final  (0) 2022.05.26
[JAVA] DecimalFormat - 세자리마다 , 넣기  (0) 2022.05.24
배열  (0) 2022.05.11