본문 바로가기
☕Java/Java 기본

[20210524] 문자 스트림과 바이트 스트림

by 캔 2021. 5. 24.

자바에서 입력과 출력은 스트림이라는 개념을 사용에서 처리한다. 즉, 키보드로 입력받은 내용을 스트림을 통해 읽어들이거나 내보내는 데 스트림을 이용하는 것이다. 스트림은 크게 문자 스트림과 바이트 스트림으로 나뉜다. 먼저, 문자 스트림은 텍스트와 같이 문자형 자료를 처리하는데 사용하고, 바이트 스트림은 이미지나 소리 등 각종 데이터 파일들을 처리하는 데 사용한다.

 

파일을 다루기 위해서는 File 객체를 사용하고 파일을 문자로 불러올 경우, FileReader, 바이트로 불러올 경우 FileInputStream를 생성하고, 파일을 쓸 때에는 문자의 경우 FileWriter, 바이트의 경우 FileOutputStream을 생성하여 사용한다.

 

System.in을 통해 문자열을 받아올 때는 바이트 스트림으로 받아오므로 InputStreamReader, 파일을 바이트 스트림으로 쓸 때는 OutputStreamWriter을 사용한다.

 

그러면 이 객체들을 사용하여 파일을 열어 입력받은 문자를 저장하는 코드를 작성해보자.

package Day10;

import java.io.*;

public class Practice {
	public static void main(String[] args) throws IOException {
		
		File f1 = new File("C:/javawork/input.txt");
		FileInputStream fis = new FileInputStream(f1);
		BufferedInputStream bis = new BufferedInputStream(fis);
		
		File f2 = new File("C:/javawork/output.txt");
		FileOutputStream fos = new FileOutputStream(f2);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		int a = 0;
		while((a = bis.read()) != -1 ) {
			System.out.print((char) a);
			bos.write(a);
		}
		
		bos.flush();
		bos.close();
		bis.close();
	}
}

File 객체를 통해 C:/javawork/input.txt 경로에 있는 텍스트 파일을 연결했다. 이 파일 객체를 FileInputStream 객체인 fis에 넣고 이를 다시 BufferedInputStream 객체에 넣는다. 위 코드에서 BufferedInputStream과 BufferedOutputStream은 입출력 속도 차이를 줄여주기 위한 스트림 버퍼이다. 그다음 파일을 저장할 파일 객체 F2에 C:/javawork/output.txt를 경로로하는 파일 객체를 만들고 FileOutputStrema fis에 넣어준다. 그다음 이를 BufferedOutputStream bos에 넣어준다.

 

bis.read()메서드를 통해 한 글자씩 int a에 담아 주고 그것을 bos.write() 메서드를 통해 파일(f2)로 저장해준다. 그리고 작업이 끝난후에는 bos.flush(), bos.close(), bis.close()를 통해 버퍼를 비우고 종료해준다.

'☕Java > Java 기본' 카테고리의 다른 글

[20210524] Java AWT  (0) 2021.05.24
[20210524] Java 스레드(thread)  (0) 2021.05.24
[20210521] Java 예외 처리  (0) 2021.05.21
[20210521] Java 자료구조, 반복자  (0) 2021.05.21
Java 클래스, 추상클래스, 인터페이스  (0) 2021.05.21