작성
·
102
0
안녕하세요 I/O 흐름을 제가 제대로 이해했는지 궁금합니다...
I/O class : byte class / String class 로 나뉨
byte class
output 위주로 정리
기본스트림(FileOutputStream)을 사용하여 1byte씩 loop를 사용해서 쓰기
byte array 사용하여 배열 사이즈 만큼 쓰기
보조스트림(BufferedOutputStream)을 사용하여 쓰기
String class
기본스트림(FileOutputStream) 과 String.getBytes(charset)을 사용하여 직접 인코딩하여 쓰기
보조스트림(OutputStreamWriter : 인코딩 대신 처리)사용하여 쓰기
FileWriter(FileOutputStream을 내부에서 생성 / OutputStreamWriter 상속) 사용하여 쓰기
질문1) 위의 흐름이 맞을까요?
질문2) String class 는 인코딩을 해야하지만 byte class 인코딩을 하지 않는다.
두가지 질문이 맞을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 조소영님.
I/O 클래스와 관련된 흐름에 대한 질문을 주셨군요. 질문에 대한 답변을 드리겠습니다.
Byte Class:
1. FileOutputStream
을 통해 1 byte씩 loop를 사용하여 쓰는 방법은 기본적인 접근 방식입니다.
2. byte 배열을 통해 배열의 크기만큼을 한 번에 쓰는 것도 효율적인 방법입니다.
3. BufferedOutputStream
은 데이터를 버퍼에 임시 저장하여 출력 성능을 향상시킵니다.
String Class:
1. FileOutputStream
과 String.getBytes(charset)
을 사용하여 문자열을 직접 인코딩해 쓰는 방법도 있습니다.
2. OutputStreamWriter
는 OutputStream
에 쓰기 전에 문자열을 특정 charset으로 인코딩하는 역할을 합니다.
3. FileWriter
는 사실 OutputStreamWriter
를 상속 받지 않지만, 내부적으로 FileOutputStream
을 사용하여 문자 데이터를 파일로 쉽게 쓸 수 있는 클래스입니다.
네, 일반적으로 문자열은 다양한 문자 집합(charset)으로 인코딩될 수 있기 때문에 String class의 경우 인코딩이 필요합니다. 반면 byte data는 이미 byte 형태로 표현되므로 별도의 인코딩이 필요하지 않습니다. 오히려 이미 인코딩된 바이트 데이터를 처리하는 경우가 많습니다.
자바의 I/O 클래스 체계에 대해 더 알아보고 싶으시다면 다음 URL을 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.