2025년 4월 18일 금요일

5-3-2강: 파일 입출력(데이터 버퍼링, 데이터 직렬화)

 1. 데이터 버퍼링이란?

데이터를 주고 받는 동안 일시적으로 데이터를 버퍼에 저장하는 것

// 데이터 버퍼링 예제
use std::fs::File;
use std::io::{BufRead, BufReader};

/*input.txt 내용
hello world
i am ferris!
haha...
*/

fn main() {
    let file = File::open("input.txt").unwrap();
    // BufReader 생성
    let reader = BufReader::new(file);

    // File 을 읽는다.
    for line in reader.lines() {
        let line = line.unwrap();
        println!("{}", line);
    }
}
/*실행결과
hello world
i am ferris!
haha...  */

2.데이터 직렬화란?

자료의 상태를 저장하기 위해 바이트 스트림으로 변환하는 것

직렬화된 데이터는  파일, 네트워크, 메모리에 저장할 수 있다.

반대로 원래의 형태로 복원하는 것을 역 직렬화 라고 한다.

예제는 Serde 를 사용해서 json 파일로 저장하고 복원한다.

// 데이터 직렬화 예제
/* serde, serde_json 를 사용하려면 의존성 추가 해야 한다.
[dependencies]
serde = {version = "1.0", features = ["derive"]}
serde_json = "1.0"
*/

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let pt = Point { x: 10, y: 20 };
    //pt 를 json 형식으로 변환한다.
    let json = serde_json::to_string(&pt).unwrap();
    println!("json: {}", json);

    // json을 사용해서 Point를 생성한다.
    let pt: Point = serde_json::from_str(&json).unwrap();
    println!("point: [{}, {}]", pt.x, pt.y);
}

/*실행결과
json: {"x":10,"y":20}
point: [10, 20] */

댓글 없음:

댓글 쓰기