바이트 단위 스트림과 문자 단위 스트림
기본적으로 Java의 스트림은 바이트(byte) 단위로 자료의 입출력이 이루어집니다. Image, Video, Music 등 파일 대부분은 바이트 단위로 읽거나 쓰면 됩니다. 그런데 Java에서 하나의 문자를 나타내는 char형은 2바이트이기 때문에 1바이트만 읽으면 한글과 같은 문자는 깨집니다. 따라서 문자를 위해 문자 스트림을 별도로 제공하고 있습니다.
종류(주요 키워드) | 예시 |
바이트 단위 스트림(Stream) | FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream 등 |
문자 단위 스트림(Reader, Writer) | FileReader, FileWiter, BufferedReader, BufferedWriter 등 |
바이트 단위 스트림은 단어 그대로, 1바이트만 읽으며
한글과 같은 문자는 깨진다고 합니다. 정말 그런지 한번 확인해보겠습니다.
바이트 단위로 파일에 자료를 쓰는 FileOutputStream 을 사용해보겠습니다.
아래에서 사용한 write(int i) 명령어는 한 바이트 출력하는 메서드입니다.
FileOutputStream fos = null; // 초기화
try {
fos = new FileOutputStream("./testNote.txt"); // 바이트 단위로 자료를 쓰는 Stream 생성
for( int i = 1; i <= 200; i++ ) { // 1부터 200까지 반복
fos.write( i ); // 반복하는 숫자를 변수 i를 출력
if( i % 10 == 0) {
fos.write( '\n' ); // 반복 10회시 줄 바꿈
fos.write( '*'); // 별표 표시(줄 바꿈 확인용)
}
}
} catch (FileNotFoundException e) {
System.out.println( e.getMessage());
} catch (IOException e) {
System.out.println( e.getMessage());
} finally {
if( fos != null ) try { fos.close(); } catch(IOException e) {}
}
출력한 결과인 testNote.txt(텍스트 파일)을 열어서 확인해보겠습니다.
위에서 출력된 내용을 하나씩 뜯어보겠습니다.
(필자는 해답을 찾기위해 바이트부터 다시 공부했었습니다..)
FileOutputStream은 바이트 단위로 파일에 자료를 쓴다고 했었기 떄문에,
FileOutputStream은 숫자를 해당 아스키 코드값의 문자로 변환하여 저장합니다.
그렇다면? 변환된 문자가 아닌 숫자 1, 2, 3 을 그대로 출력하려면 어떻게 해야할까요?
방법 1. 덧셈연산자 이용
덧셈 연산자 '+'는 두 개의 피 연산자 중어느 한쪽이라도 String이라면 연산결과는 String입니다.
즉, 변수에 빈 문자열을 더하면 그 결과로 String을 얻을 수 있습니다.
방법 2. String 클래스의 valueOf() 메서드를 이용하기
String 클래스의 valueOf 메서드는 매개변수로 기본형 변수와 객체를 지정할 수 있으며, 그 결과로 String을 얻음.
구구단 예제를 통해 더 알아보겠습니다.
방법 1. 덧셈연산자 이용
방법 2. String 클래스의 valueOf() 메서드를 이용하기
댓글