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
'IT > JAVA' 카테고리의 다른 글
[JAVA] 호텔 예약 관리 프로그램 (0) | 2023.05.08 |
---|---|
[JAVA] #19 데이터베이스 입출력(게시판 프로그램) (1) | 2023.05.02 |
[JAVA] #17 스트림 요소 처리 (0) | 2023.05.01 |
[JAVA] #16 람다식 (0) | 2023.04.27 |
[JAVA] #15 컬렉션 자료구조 (0) | 2023.04.27 |