728x90
반응형
SMALL

입출력 스트림

* 바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용

* 문자 스트림 : 문자만 입출력할 때 사용

=> java.io 패키지 사용

 

구분 바이트 스트림 문자 스트림
입력 스트림 출력 스트림 입력 스트림 출력 스트림
최상위 클래스 InputStream OutputStream Reader Writer
하위 클래스(ex) XxxInputStream
FileInputStream
XxxOutputStream
FileOutputStream
XxxReader
FileReader
XxxWriter
FilreWriter

바이트 출력 스트림

OutputStream은 바이트 출력 스트림의 최상위 클래스로 추상 클래스이다.

리턴 타입 메소드 설명
void write(int b) 1byte를 출력
void write(byte[] b) 매개값으로 주어진 배열b의 모든 바이트를 출력
void write(byte[] b, int off, int len) 매개값으로 주어진 배열b[off]부터 len개의 바이트를 출력
void flush() 출력 버퍼에 잔류하는 모든 바이트를 출력
void close() 출력 스트림을 닫고 사용 메모리 해제

1바이트 출력

public class WriteExample{
	public class void main(String[] args){
    	try{
        	OutputStream os = new FileOutputStream("test1.db");
            
            byte a =10;
            byte b =20;
            byte c =30;
            
            os.write(a);
            os.write(b);
            os.write(c);
            
            os.flush();
            os.close();
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

바이트 배열 출력

public class WriteExample{
	public static void main(String[] args){
    	try{
        	OutputStream os = new FileOutputStream("test2.db");
            byte[] array = {'A','B','C'};
            
            os.write(array);
            os.flush();
            os.close();
            
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

바이트 배열 일부분 출력

public class WriteExample{
	public static void main(String[] args){
    	try{
        	OutputStream os = new FileOutputStream("test3.db");
            byte[] array = {'A','B','C','D','E'};
            
            os.write(array,1,3); //B C D 출력
            os.flush();
            os.close();
            
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

바이트 입력 스트림

InputStream은 바이트 입력 스트림의 최상위 클래스로 추상 클래스이다.

리턴 타입 메소드 설명
int read() 1byte 읽은 후 읽은 바이트를 리턴
int read(byte[] b) 읽은 바이트를 매개값으로 주어진 배열에 저장 후 읽은 바이트 수를 리턴
void close() 입력 스트림을 닫고 사용 메모리 해제

 

1바이트 읽기

public class ReadExample{
	public static void main(String[] args){
    	try{
        	InputStream is = new FileInputStream("test1.db");
            
            whie(True){
            	int data = is.read();
                if(data == -1) break;
                System.out.println(data);
            }
            
            is.close();
        }catch(FileNotFoundException e){
        	e.printStrackTrace();
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

바이트 배열로 읽기

public class ReadExample{
	public static void main(String[] args){
    	try{
        	InputStream is = new FileInputStream("test2.db");
            
            byte[] data = new byte[100];
            
            while(true){
            	int num = is.read(data);
                if(num == -1) break;
                for(int i=0; i<num; i++){
                	System.out.println(data[i]);
                }
            }
            
            is.close();
        }catch(FileNotFoundException e){
        	e.printStackTrace();
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

바이트 배열 읽고 바로 출력하기

public class ReadExample{
	public static void main(String[] args){
    	try{
        	InputStream is = new FileInputStream("test.txt");
            OutputStream os = new FileOutputStream("test2.txt");
            
            byte[] data = new byte[100];
            
            while(true){
            	int num = is.read(data);
                if(num == -1) break;
                os.write(data,0,num);
            }
            os.flush();
            os.close();            
            is.close();
            
            System.out.prinln("복사가 되었습니다");
        }catch(FileNotFoundException e){
        	e.printStackTrace();
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

문자 입출력 스트림

InputStream과 OutputSTream에 대응하는 문자 입출력 스트림으로는 Reader와 Writer가 있다.

 

문자 출력

리턴 타입 메소드 설명
void write(int c) 매개값으로 주어진 한 문자를 출력
void write(char[] cbuf) 매개값으로 주어진 배열의 모든 문자를 출력
void write(char[] cbuf, int off, int len) 매개값으로 주어진 배열에서 cbuf[off]부터 len개까지의 문자를 출력
void flush() 버퍼에 잔류하는 모든 문자를 출력
void close() 출력 스트림을 닫고 사용 메모리를 해제

 

public class WriteExample{
	public static void main(String[] args){
    	try{
        	Writer writer = new FileWriter("text.txt");
            
            //한 문자씩 출력
            char a = 'A';
            writer.write(a);
            char b = 'B';
            writer.write(b);
            
            //char 배열 출력
            char[] arr={'C','D','E'};
            writer.write(arr);
            
            //문자열 출력
            writer.write("FGH");
            
            writer.flush();
            writer.close();
        }catch(IOException e){
        	e.printStacTrace();
        }
    }
}

 

문자 읽기

메소드 설명
int read() 1개의 문자를 읽고 리턴
int read(char[] cbuf) 읽은 문자들을 매개값으로 주어진 문자 배열에 저장하고 읽은 수를 리턴
void close() 입력 스트림을 닫고, 사용 메모리 해제
public class ReadExample{
	public static void main(String[] args){
    	try{
        	Reader reader = null;
            
            //한 문자씩
            reader = new FileReader("test.txt");
            while(true){
            	int data = reader.read();
                if(data == -1) break;
                System.out.println((char)data);
            }
            reader.close();
            
            reader = new FileReader("test.txt");
            char[] data = new char[100];
            while(true){
            	int num=reader.read(data);
                if(num==-1) break;
                for(int i=0; i<num; i++){
                	System.out.print(data[i]);
                }
            }
            reader.close();        
        }catch(FileNotFoundException e){
        	e.printStackTrace();
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

 

보조 스트림

보조 스트림 기능
InputStreamReader / OutputStreamWriter 바이트 스트림을 문자 스트림으로 변환
BufferdInputStream, BufferedOutputStream
BufferedReader, BufferedWriter
입출력 성능 향상
DataInputStream, DataOutputStream 기본 타입 데이터 입출력
PrintStream, PrintWriter 줄바꿈 처리 및 형식화된 문자열 출력
ObjectInputStream, ObjectOutputStream 객체 입출력

 

문자 변환 스트림

InputStream을 Reader로 변환

InputStream is = new FileInputStream("text.txt");
Reader reader = new InputStreamReader(is);

OutputStream을 Writer로 변환

OutputStream os = new FileOutputStream("text.txt");
Writer writer = new OutputStreamWriter(os);

 

입출력 성능 향상 스트림

BufferedInputStream bis = new BufferedInputStream(바이트 입력 스트림);
BufferedOutputStream bos = new BufferedOutputStream(바이트 출력 스트림);
BufferedReader br=new BufferedReader(문자 입력 스트림);
BufferedWriter bw = new BufferedWriter(문자 출력 스트림);

 

기본 타입 스트림

바이트 스트림에 DataInputStream과 DataOutputStream 보조 스트림을 연결하면 기본 타입인 boolean, char, short, int, long, double 값을 입출력할 수 있다.

DataInputStream dis=new DataInputStream(바이트 입력 스트림);
DataOutputStream dos = new DataOutputStream(바이트출력 스트림);

 

프린트 스트림

프린트 스트림은 print(), println(), prinf() 메소드를 갖고 있는 보조 스트림이다.

PrintStream ps = new PrintStream(바이트 출력 스트림);
PrintWriter pw = new PrintWriter(문자 출력 스트림);

 

객체 스트림

*직렬화 : 객체를 출력하기 위해 필드값을 일렬로 늘어선 바이트로 변경

*역직렬화 : 직렬화된 바이트를 객체의 필드값으로 복원하는 것

ObjectInputStream ois = new ObjectInputStream(바이트 입력 스트림);
ObjectOutputStream oos = new ObjectOutputStream(바이트 출력 스트림);

oos.writeObject(객체);
객체타입 변수 = (객체타입)ois.readObject();

 

728x90
반응형
LIST

+ Recent posts