본문 바로가기
public void static main()/Java

[JAVA] BufferedReaader, InputStream 등등!

by 햄리뮤 2021. 1. 10.
반응형

대표사진으로 쓰려고 가져옴! [출처] http://softlect.in/index.php/java-input-and-output/

어제 못한 나머지 부분 공부... 하자!

1. HttpURLConnection

2. URL class

3. BufferedReader 

4. InputStream 

5. StringBuffer 

6. URLEncoder 

7. StringUtils 

 

BufferedReader [출처] https://www.journaldev.com/19879/java-bufferedreader

3. BufferedReader

BufferedReader 하면 따라오는것이 BufferWriter!

이름처럼 버퍼를 이용해서 읽고 쓰는 함수!

버퍼를 이용하기 때문에 이 함수를 이용하면 입출력의 효율이 좋아진다. (모아 두었다가 한번에 전송하기때문에!)

 

- 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달됨. 

- 많은 양의 데이터를 입력받을 경우 BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 나음!

 

Buffer

- 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역.

- 입출력 속도 향상을 위해 버퍼 사용.

 

BufferedReader 사용방법!

BufferedReader bf = BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine(); // String
int i = Integer.parseInt(bf.readLine()); // int

🛑주의 사항!

- readLine()시 리턴값을 string으로 고정되기에 String이 아닌 다른 타입으로 입력을 받을려면 형변환을 꼭 해주어야한다!(그렇구나!)

- 예외처리도 꼭 해주어야한다. readLine()을 할때마다 try & catch를 활용하여 예외처리를  해주어도 되지만 대개 throws IOException을 통하여 작업한다.

 

참고한 블로그에서 Buffered관련 쭉 보다가 StringTokenizer 도 적어주셨는데.. Read한 데이터 가공이라는 섹션이 있는데.... 그냥 가공하는 건가 ㅠ 따로 또 찾아봐야겠다 ㅠ 공부할 목록에 추가!

 

Read한 데이터 가공

StringTokenizer st = new StringTokenizer(s); // StringTokenizer 인자값에 입력 문자열
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());

String array[] = s.split(" "); // 공백마다 데이터 끊어서 배열에 넣음!

Read한 데이터는 Line 단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해주어야하는데.

위의 두가지 방법이 대표적이다!

- 첫번째 방법으로는 StringTokenizer에 nextToken() 함수를 쓰면 readLine()을 통해 입력받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있음!

- 두번째 방법으로는 String.split() 함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식!(배열 시러!)

 

BufferedWriter

일반적으로 출력을 할때 System.out.println(""); 방식을 사용함. 적은 양의 출력일 경우 성능차이가

미미

 

미미 하겠지만 많은 양의 출력에서는 입력과 마찬가지로 Buffer를 활용해주는게 좋음!

 

 

BufferedWriter 사용법

 

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = "helloworld"; // 출력할 문자열
bw.write(s); // 출력
bw.newLine(); // 줄바꿔!
bw.flush(); // 남아있는 데이터를 모두 출력시킴
bw.close(); // 스트림을 닫음!

BufferedWriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush()/close()를 반드시 호출해 주어 뒤처리를 해주어야한다!

그리고 bw.write에는 System.out.println();과 같이 자동 줄바꿈 기능이 없기 때문에 줄바꿈을 해주어야할 경우에는 \n을 통해 따로 처리해주어야함!

 

메소드까지 정리해주심 ㅠ 너무 친절하자나 ㅠ

coding-factory.tistory.com/251

jhnyang.tistory.com/92

궁금하신분은 위 링크로! 두곳다 정리해주셨습니다!

 

⭕정리!

- Scanner: 입력을 받을경우 Spcae Enter를 모두 경계로 인식

- BufferedReader: Enter만 경계로 인식, 받은 데이터가 String으로 고정

Scanner에 비해 다소 사용하기는 불편 BUT!! 많은 양의 데이터를 입력 받을 경우 효율적!

   -> 작업속도에 차이가 많이남

   -> 예외처리를 꼭 해주어야함

 

4. InputStream 

자바에서 데이터는 스트림 (Stream)을 통해 입출력됨. 스트림은 단일 방향으로 연속적으로 흘러가는 것을 말하는데 물이 높은 곳에서 낮은 곳으로 흐르듯이 데이터는 출발지에서 나와 도착지로 흘러간다는 개념!

 

프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정되는데, 프로그램이 데이터를 입력받을때는 입력(InputStream)이라고 부른다!

입력스트림의 출발지는 키보드, 파일, 네트워크상의 프로그램이 될 수 있고, 출력 스트림의 도착지는 모니터, 파일, 네트워크상의 프로그램이 될수있다!

입출력과 스트림 [출처] https://coding-factory.tistory.com/281

항상 프로그램을 기준으로

데이터가 들어오면 입력 스트림이고

데이터가 나가면 출력스트림이라고 생각하면됨!

 

프로그램이 네트워크상의 다른 프로그램과 데이터를 교환하기 위해서는 양쪽 모두 입력스트림과 출력스트림이 필요함!

스트림은 단방향 통신을 한다는 특징이 있으므로 하나의 스트림으로 입출력을 동시에 할 수 없기 때문이다!

데이터 입출력 [출처] https://coding-factory.tistory.com/281

 

 

 

InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스임!

모든 바이트 기반 입력 스트림은 이클래스를 상속 받아서 만들어진다!

InputStream 클래스에는 바이트 기반 입력 스트림이 기본적으로 가져야할 메소드들이 정의 되어있다!

 

InputStream [출처] https://coding-factory.tistory.com/281

 

 

 

OutputStream은 바이트 기반 출력 스트림의 최상의 클래스로 추상클래스임!

모든 바이트 기반 출력 스트림 클래스는 이 클래스를 상속 받아서 만들어진다!

OutputStream 클래스에는 모든 바이트 기반 출력 스트림이 기본적으로 가져야 할 메소드가 정의되어있음!

 

OutputStream [출처] https://coding-factory.tistory.com/281

 

 

그 메소드가 궁금하시다면 coding-factory.tistory.com/281 이곳으로!

 

아힘들어 오...오늘은 이정도만! 왜냐면... 왜냐면 오늘은 일요일이자나!!

내일 또 힘내서 하자!! 공부하느라 너무너무 수고많았다 리마야!

 

 

 

굉장해 엄청나

공부에 도움을 주신 굉장해 엄청나 지식인분들께 오늘도역시 감사의 말씀 올리며 

본인들의 지식을 다른 사람들을 위하여 공유해주신 모든 분들 사랑합니다!

덕분에 이렇게 공부합니다!

 

[출처] jhnyang.tistory.com/92

 

[Java 자바 입출력] BufferedReader/BufferedWriter

[자바 입출력 함수] BufferedReader / BufferWriter BufferedReader/BufferedWriter은 이름처럼 버퍼를 이용해서 읽고 쓰는 함수입니다. 이 함수는 버퍼를 이용하기 때문에 이 함수를 이용하면 입출력의 효율이..

jhnyang.tistory.com

[출처] coding-factory.tistory.com/251

 

[Java] BufferedReader, BufferedWriter를 활용한 빠른 입출력

BufferedReader/BufferedWriter는 Buffer에 있는 IO 클래스입니다. 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달되됩니다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치로

coding-factory.tistory.com

[출처] coding-factory.tistory.com/281

 

[Java] 입력 스트림(Input Stream)과 출력 스트림(Output Stream)

 데이터 입출력 프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번하게 일어납니다. 데이터는 사용자로부터 키보드, 마우스 등을 통해 입력될 수도 있고, 파일 또는 네

coding-factory.tistory.com

 

 

 

 

 

 


** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의들은

내용이 정리가 되었습니다.

그림들은 그림밑에 출저표시를 해놓았습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

'public void static main() > Java' 카테고리의 다른 글

[JAVA] JVM Memory  (0) 2022.02.18
[JAVA] 자바 기초 개념 정리  (0) 2021.04.24
[JAVA] 내가 뽑은 자바 기본 개념 문제  (0) 2020.02.04

댓글