자바

출력 스트림

devjones 2020. 9. 6. 16:01

※ System.out은 OutputStream 클래스의 객체가 아니고, OutputStream 클래스의 서브클래스인 PrintStream 클래스의 객체이다.

 

다음은 OutputStreamWriter 클래스를 사용하여 문자열을 출력하는 예제이다.

package ch02;

import java.io.IOException;
import java.io.OutputStreamWriter;

public class OutputStreamWriterTest {
	public static void main(String[] args) {
		OutputStreamWriter out = new OutputStreamWriter(System.out);
		
		try {
			out.write("배우고 싶지 않은 자바!");
			out.flush();
		} catch (IOException e) {
			System.out.println(e.toString());
		}
	}
}

 

다음은 FileWriter 클래스와 앞에서 배운 FileReader 클래스를 사용해서 파일을 복사하는 예제이다.

package ch02;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileCopyTest {
	public static void main(String[] args) {
		try {
			FileReader in = new FileReader("MYDATA-1.txt");
			FileWriter out = new FileWriter("MYDATA-2.txt");
			
			int ch;
			while((ch = in.read()) != -1) {
				out.write(ch);
			}
			
			in.close();
			out.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

 

※ BufferedWriter 클래스를 생성할 때 OutputStreamWriter 클래스의 객체를 인수로 주면, 버퍼를 사용하면서 캐릭터 단위로 출력하는 스트림이 생성된다.

 

다음은 BufferedWriter 클래스를 사용하여 화면에 문자열을 출력하는 예제이다.

package ch02;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class BufferedWriterTest {
	public static void main(String[] args) {
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
		
		try {
			out.write("재미없는 자바!");
			out.flush();
		} catch (IOException e) {
			System.out.println(e.toString());
		}
	}
}

 

다음은 DataOutputStream 클래스를 사용해서 파일에 데이터를 쓰고, DataInputStream 클래스를 사용해서 저장된 데이터를 다시 읽는 예제이다.

package ch02;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataInputOutputTest {
	public static void main(String[] args) {
		char myChar = 'T';
		byte myByte = 44;
		boolean myBoolean = true;
		
		try {
			DataOutputStream out = new DataOutputStream(new FileOutputStream("MYDATA"));
			out.writeChar(myChar);
			out.writeByte(myByte);
			out.writeBoolean(myBoolean);
			out.flush();
			out.close();
			
			DataInputStream in = new DataInputStream(new FileInputStream("MYDATA"));
			myChar = in.readChar();
			myByte = in.readByte();
			myBoolean = in.readBoolean();
			
			System.out.println("myChar : " + myChar);
			System.out.println("myByte : " + myByte);
			System.out.println("myBoolean : " + myBoolean);
			
		} catch (IOException e) {
			System.out.println(e.toString());
		}
	}
}

 

※ PrintStream 클래스는 필터 스트림으로 OutputStream 클래스의 객체를 인수로 받아서 생성할 수 있다.

※ PrintStream 클래스가 OutputStream 클래스의 복잡한 메소드들을 print() 메소드와 pritnln() 메소드만으로 사용할 수 있도록 정리한 필터 스트림인 것처럼, PrintWriter 클래스는 OutputStreamWriter 클래스의 메소드들을 print() 메소드와 println()  메소드만으로 사용할 수 있게 정리한 필터 스트림이다.

 

다음은 앞에서 작성했던 OutputStreamWriterTest.java 에제를 PrintWriter 클래스를 사용하도록 고친 것이다. write() 메소드 대신 print() 메소드를 사용한 것을 알 수 있다.

package ch02;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class PrintWriterTest {
	public static void main(String[] args) {
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		
		out.print("노잼스 자바!");
		out.flush();
	}
}