Java/Java 인강

Java 인강 필기 14

code2772 2022. 10. 2. 11:05
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