●바이트 스트림(Byte Stream)
- 데이터의 종류가 파일, 그림, 동영상 등의 바이트 기반인 경우 사용하는 클래스로 바이트 단위로 입출력을 제어한다.
InputStream OutputStream |
입출력을 위한 바이트 스트림의 최상위 추상 클래스 |
FileInputStream FileOutputStream |
파일 입출력을 위한 바이트 스트림 클래스 |
DataInputStream DataOutputStream |
자바 기본형(primitive) 데이터를 입출력 하기 위한 클래스 |
BufferedInputStream BufferedOutputStream |
입출력 스트림에 버퍼링 기능을 추가한 클래스 |
PrintStream |
System.out을 통해 콘솔로 출력하기 위한 클래스 |
●OutputSTream, InputStream 클래스
- 다른 세부적인 기능을 하는 하위 클래스의 상위 추상 클래스이다. 이 클래스들은 자신들은 객체가 될수 없고, 객체가 될수 있는 하위 클래스가 있다. byte단위로 입,출력을 한다.
- OutputStream 클래스 예제
import java.io.*; public class OutputStream { public static void main(String args[]) throws java.io.IOException{ for(byte i=32; i<127; i++){ System.out.write(i); System.out.write('\t'); } } } |
- InputStream.java
import java.io.*; public class InputStream{ public static void main(String args[]) throws java.io.IOException{ byte[] buf = new byte[100]; int a; while((a=System.in.read(buf)) >=0) System.out.write(buf, 0, a); } } |
●FileOutputStream 클래스
- 데이터를 파일에 바이트 스트림으로 저장하기 위해 사용된다. 파일멸이나 File클래스의 객체를 인수로 넘겨줘서 시스템에 파일을 직접 생성할 수 있다. 기본적으로 파일이 이미 존재하면 그 파일에 덮어 쓰게 되고 기존의 내용은 사라지게 된다.
- FileOutputStreamEx.java
import java.io.*; class FileOutputStreamEx { public static void main(String args[]) throws IOException{ FileOutputStream f = new FileOutputStream("a.txt"); f.write('A'); f.write('B'); f.close(); } } |
●FileInputStream 클래스
- 시스템의 파일로부터 데이터를 바이트 스트림으로 읽어 들이기 위해 사용되고, 파일이 없으면 IOException을 발생시킨다.
- FileInputStreamEx
import java.io.*; class FileInputStreamEx { public static void main(String args[]) throws IOException{ FileInputStream f = new FileInputStream("a.txt"); System.out.println(f.read()); f.close(); } } |
●DataOutputStream, DataInputSream 클래스
- 단순히 바이트만을 읽고 쓰는 기존의 스트림보다 상위 수준의 통신이 가능하도록 하는 기능을 제공한다. 기존의 스트림은 바이트 단위로 데이터를 읽는 기능밖에 없기때문에 기본 자료형의 데이터를 읽거나 쓰기위해서는 사용자가 직접 제어 해야했지만 이 클래스를 사용하면 원하느 ㄴ타입으로 데이터를 읽고 쓰는 것이 가능하다.
- DataIOStreamEx.java
import java.io.*; class DataIOStreamEx{ public static void main(String[] args){ char input_char = 'a', output_char = (char)0; int input_int = 10, output_int=0; String input_str = "abc", output_str=""; DataInputStream dis = null; DataOutputStream dos = null; try{ FileOutputStream fo = new FileOutputStream("fileoutput.txt"); dos = new DataOutputStream(fo); }catch(FileNotFoundException e){ System.out.println(e); } try{ dos.writeChar(input_char); dos.writeInt(input_int); dos.writeUTF(input_str); dos.close(); }catch(IOException e){ System.out.println(e+"aaa"); } try{ FileInputStream fi = new FileInputStream("fileoutput.txt"); dis = new DataInputStream(fi); }catch(FileNotFoundException e){ System.out.println(e+"aa"); } try{ output_char = dis.readChar(); output_int = dis.readInt(); output_str = dis.readUTF(); }catch(IOException e){ System.out.println(e+"a"); } System.out.println(output_char); System.out.println(output_int); System.out.println(output_str); } } |
●BufferedInputStream, BufferedOutputStream
- 기존의 스트림위에서 입출력 버퍼링을 제공하는 필터 스트림 클래스이다. 읽기와 쓰기가 메모리 버퍼에서 직접 이루어질 수 있고, 운영체제는 가끔씩만 호출되기 때문에 오버헤드가 줄어든다.
-BufferedIOStreamEx.java
import java.io.*; public class BufferedIOStreamEx { public static void main(String[] args){ int i, len = 0; byte[] buffer = new byte[256]; BufferedInputStream in = null; BufferedOutputStream out = null; String sourceFile = "BufferedIOStreamEx.java"; String destFile = "output.txt"; System.out.println("소스 파일 이름:"+sourceFile); System.out.println("목표 파일 이름:"+destFile);
try{ in = new BufferedInputStream(new FileInputStream(new File(sourceFile))); FileOutputStream file_out = new FileOutputStream(destFile); out = new BufferedOutputStream(file_out, 256); }catch(FileNotFoundException e){ System.out.println(e); } try{ while((i=in.read(buffer))!= -1){ out.write(buffer); len+=1; System.out.println("현재 읽은 데이터["+i+","+len+"], 나머지 데이터["+in.available()+"]"); } in.close(); out.close(); System.out.println(len+"바이트 데이터 복사완료"); }catch(IOException e){ System.out.println(e); } } } |
'프로그래밍 > java' 카테고리의 다른 글
자바 java.io 패키지, File클래스 (0) | 2014.04.11 |
---|---|
자바 java.io 패키지, 문자 스트림(Character Stream) (0) | 2014.04.11 |
자바 java.io 패키지, 스트림 (0) | 2014.03.07 |
자바 네트워크 프로그래밍 UDP 소켓 (0) | 2014.02.09 |
자바 네트워크 프로그래밍 TCP/IP 소켓 (0) | 2014.01.31 |
댓글