728x90
반응형
(22.8.8)
# 45강 입출력
- IO와 스트림(Stream) -
- IO - Input(입력), Output(출력), 입력: 프로그램에 데이터가 들어오는 것
출력: 프로그램의 데이터가 나가는 것
- 스트림 - 데이터의 흐름
- 스트림의 특징 - 단 방향이다. - FIFO 구조를 갖고 있다.
- 출력단위에 따라 바이트 기반과 문자단위로 분류된다.
> 출력단위: 1byte-> 바이트 기반 스트림, 문자 -> 문자 기반 스트림
- 바이트 기반 스트림 - 바이트 단위로 데이터를 입출력하는 스트림
package day45_1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Day45_1 {
public static void main(String[] args) throws IOException{
FileInputStream fis = null;//입력스트림
FileOutputStream fos = null;//출력스트림
fis = new FileInputStream("prac.txt");//존재하는 파일과 연결
fos = new FileOutputStream("result.txt");//존재하지 않으며 파일 생성, 존재하면 파일 덮음
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int data;
while((data=fis.read())!=-1) {
bos.write(data);
}//파일과의 연결을 닫는 작업
bos.close();
bis.close();
}
}
# 46강 입출력 2
- 문자 기반 스트림 - 16bit의 문자나 문자열을 읽고 쓰는 스트림
자바에서 사용하는 chat 형 변수는 2byte 이므로 바이트 기반 스트림은 불편하므로, 문자 단위로 입출력을 다루는 문자기반 스트림을 제공
- 직렬화 - 자바 시스템 내부에서 사용하는 객체나 데이터를 외부의 시스템에서 사용할 수 있도록 byte 단위의 데이터로 변환시키는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술, Serializable 인터페이스는 메서드 없이 JVM에게 정보 전달 기능만 존재
- 언마샬링(unmarshalling) - 객체 스트림을 통해 전달된 바이트(Byte) 단위의 데이터를 원래의 객체로 복구하는 작
- 객체 전송의 단계
1) 직렬화된 객체를 바이트 단위로 분해한다(marshalling)
2) 직렬화 되어 분해된 데이터를 순서에 따라 전송
3) 전송받은 데이터를 복구(unmarshalling)
package day46;
import java.io.*;
public class SerializableEx {
public static void main(String[] args) {
marshalling();
unmarshalling();
}
public static void marshalling() {
try {
FileOutputStream fos = new FileOutputStream("user.ser");
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream out = new ObjectOutputStream(bos);
User user1= new User("test","1234","가길동");
out.writeObject(user1);
out.close();
System.out.println("객체질렬화 완료!");
}catch(IOException e) {e.printStackTrace();}
}
public static void unmarshalling() {
try {
FileInputStream fis = new FileInputStream("user.ser");
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream in = new ObjectInputStream(bis);
User user2= (User)in.readObject();
System.out.println(user2.toString());
in.close();
System.out.println("객체 복원 완료!");
}
catch(Exception e) {}
}
}
class User implements Serializable{
private String id;
private String pw;
private String name;
public User(String id, String pw, String name) {
this.id = id;
this.pw = pw;
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", pw=" + pw + ", name=" + name + "]";
}
}
반응형
'Java > Java 인강' 카테고리의 다른 글
Java 인강 필기 15 (0) | 2022.10.02 |
---|---|
Java 인강 필기 13 (1) | 2022.10.02 |
Java 인강 필기 12 (1) | 2022.10.02 |
Java 인강 필기 11 (0) | 2022.10.02 |
Java 인강 필기 10 (1) | 2022.10.02 |