본문 바로가기
Java/Java 인강

Java 인강 필기 14

by code2772 2022. 10. 2.

[ 목차 ]

    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