강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

조소영님의 프로필 이미지
조소영

작성한 질문수

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

정리 질문있습니다

작성

·

102

0

안녕하세요 I/O 흐름을 제가 제대로 이해했는지 궁금합니다...

 

I/O class : byte class / String class 로 나뉨

 

byte class

output 위주로 정리

  1. 기본스트림(FileOutputStream)을 사용하여 1byte씩 loop를 사용해서 쓰기

  2. byte array 사용하여 배열 사이즈 만큼 쓰기

  3. 보조스트림(BufferedOutputStream)을 사용하여 쓰기

 

String class

  1. 기본스트림(FileOutputStream) 과 String.getBytes(charset)을 사용하여 직접 인코딩하여 쓰기

  2. 보조스트림(OutputStreamWriter : 인코딩 대신 처리)사용하여 쓰기

  3. FileWriter(FileOutputStream을 내부에서 생성 / OutputStreamWriter 상속) 사용하여 쓰기

     

질문1) 위의 흐름이 맞을까요?

질문2) String class 는 인코딩을 해야하지만 byte class 인코딩을 하지 않는다.

 

두가지 질문이 맞을까요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 조소영님.

I/O 클래스와 관련된 흐름에 대한 질문을 주셨군요. 질문에 대한 답변을 드리겠습니다.

질문 1) 흐름을 제대로 이해했는지?

Byte Class:
1. FileOutputStream을 통해 1 byte씩 loop를 사용하여 쓰는 방법은 기본적인 접근 방식입니다.
2. byte 배열을 통해 배열의 크기만큼을 한 번에 쓰는 것도 효율적인 방법입니다.
3. BufferedOutputStream은 데이터를 버퍼에 임시 저장하여 출력 성능을 향상시킵니다.

String Class:
1. FileOutputStreamString.getBytes(charset)을 사용하여 문자열을 직접 인코딩해 쓰는 방법도 있습니다.
2. OutputStreamWriterOutputStream에 쓰기 전에 문자열을 특정 charset으로 인코딩하는 역할을 합니다.
3. FileWriter는 사실 OutputStreamWriter를 상속 받지 않지만, 내부적으로 FileOutputStream을 사용하여 문자 데이터를 파일로 쉽게 쓸 수 있는 클래스입니다.

질문 2) String class는 인코딩이 필요하지만 byte class는 인코딩을 하지 않는다?

네, 일반적으로 문자열은 다양한 문자 집합(charset)으로 인코딩될 수 있기 때문에 String class의 경우 인코딩이 필요합니다. 반면 byte data는 이미 byte 형태로 표현되므로 별도의 인코딩이 필요하지 않습니다. 오히려 이미 인코딩된 바이트 데이터를 처리하는 경우가 많습니다.

자바의 I/O 클래스 체계에 대해 더 알아보고 싶으시다면 다음 URL을 참고하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

조소영님의 프로필 이미지
조소영

작성한 질문수

질문하기