[Java] 04. File I/O

Yeonbo_ra·2024년 10월 12일

Java

목록 보기
4/6
post-thumbnail

1. Reading and Writing Files

파일 읽기 : FileReader / BufferedReader

  • 한 번 열면 반드시 닫아야 한다. → try-catch 블럭 사용
  • FileReader : 한글자씩 읽음(비효율적)
    • 짧은 문자열 읽을 때 사용
  • BufferedReader : readline() 사용 가능
    • 주로 이 class를 사용
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
	String line;
    while ((line = br.readLine() != null){
    	System.out.println(line);
    }
} catch (IOException e) {
	e.printStackTrace();
}

→ FileReader을 인자로 받아 읽도록 함

파일 쓰기 : FileWriter / BufferedWriter

  • 한 번 열면 반드시 닫아야 한다. → try-catch 블럭 사용
  • FileWriter : 한글자씩 씀(비효율적)
    • 짧은 문자열 쓸 때 사용
  • BufferedWriter : String을 한 번에 입력 가능
    • 주로 이 class를 사용
try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))){
	bw.write("Hello, World!");
} catch (IOException e) {
	e.printStackTrace();
}

→ FileWriter을 인자로 받아 쓰도록 함


2. Serialization

시리얼화

  • 어떤 타입의 객체(object)이던 상관없이 byte 타입으로 저장하는 것

  • ObjectOutputStream / ObjectInputStream 사용

  • How to?

    1. Serialzable 인터페이스 implement & serialVersionID 통해 check
      public class MyClass implements Serializable {
        	private static final long serialVersionID = 1L;
            
            // class field and method
        }
    2. 객체를 시리얼화 : ObjectOutStream 사용 → File에 저장
      try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.ser"))) {
        	oos.writeObject(new Myclass()));
        } catch (IOException e) {
        	e.printStackTrace();
        }
      → FileOutputStream을 인자로 받아 사용
    3. 시리얼에서 다시 객체로 불러오기 → File에서 불러와서 객체에 저장
      try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.ser"))){
        	MyClass obj = (MyClass) ois.readObject();
        } catch (IOException | ClassNotFoundException e){
        	e.printStactTrace();
        }
      → FileInputStream을 인자로 받아 사용

시리얼화의 장점

  • Persistence : 파일 or DB에 저장했다 다시 불러올 수 있음
  • Distributed system : 다른 JVM에 전달 가능
  • Deep copy : 객체의 깊은 복사할 때 사용 가능
  • Caching : 캐싱할 때 좋음
  • Interoperability : 여러 곳에서 사용 가능
  • Versioning : 시리얼 ID를 통해 버전 체크 가능
profile
컴공 대학생의 공부기록

0개의 댓글