Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[20일차 Kotlin] 스트림(Stream) 본문

Computer/Kotlin

[20일차 Kotlin] 스트림(Stream)

Wise-99 2023. 5. 24. 22:54

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 FileOutputStream

  • 프로그램에서 파일로 데이터를 전송할 때 사용하는 스트림이다.
  • 데이터를 보내고자 하는 파일이 없으면 자동으로 생성된다.

✔️ 주요 메서드

  • 생성자(파일이름) : 파일 이름의 파일을 열고 출력 스트림을 추출한다. 이 때 데이터를 덮어 씌워진다.
  • 생성자(파일이름, boolean) : 파일이름의 파일을 열고 출력 스트림을 추출한다. 이 때 boolean 값을 true로 주면 쓰고자하는 내용이 뒤에 추가가 된다.
  • write : 바이트 형태의 데이터를 파일로 쓴다.
  • close : 스트림을 닫는다.
  • flush : 메모리에 남겨진 데이터를 모두 송출한다.

📖 FileInputStream

  • 파일의 데이터를 수신할 때 사용하는 스트림이다.
  • 데이터를 읽어올 파일이 없으면 예외가 발생한다.

✔️ 주요 메서드

  • 생성자(파일이름) : 파일 이름의 파일을 열고 입력 스트림을 추출한다.
  • available : 한번에 데이터를 읽어올 수 있는 양을 알아온다. 한번에 읽어올 수 있는 양이 파일의 용량보다 많을 경우 파일의 용량을 가져온다.
  • close : 파일을 닫는다.
  • read : 데이터를 바이트 형태로 읽어온다.

📖 DataStream

  • 기본 자료형 값을 byte 배열 형태로 변환해주는 역할을 하는 필터 스트림이다.
  • 기본 스트림을 통해 데이터 송수신을 하기 위해서는 바이트 형태의 데이터로 송수신을 하게 된다.
  • 개발자가 직접 송수신할 데이터를 바이트화 시키거나 바이트화 되어 있는 데이터를 사용하고자 하는 형태로 변환해야 하는데 이 작업을 해주는 스트림이다.

✔️ 데이터 송수신 메서드

  • readXXX : read 메서드가 굉장히 많이 존재하는데 각 타입별로 존재하고 있다. 정수형일 경우 readInt를 사용하면 바이트로 넘어온 데이터를 정수형으로 변환하여 되돌려준다.
  • writeXXX : 송신하고자 하는 데이터를 바이트 형태로 변환하여 기본 스트림에게 넘겨준다. 정수형일 경우 writeInt를 사용한다.

 

 

 

✔️ 예제 코드

fun main(){

    saveDataStream()
    readDataStream()
}

//DataStream 으로 쓰기
fun saveDataStream(){
    val fos = FileOutputStream("data1.dat")
    val dos = DataOutputStream(fos)

    dos.writeInt(100)
    dos.writeDouble(11.11)
    dos.writeUTF("문자열1")

    dos.flush()
    dos.close()
    fos.close()

    println("쓰기 완료")
}

// DataStream 으로 읽기
fun readDataStream(){
    val fis = FileInputStream("data1.dat")
    val dis = DataInputStream(fis)

    val a1 = dis.readInt()
    val a2 = dis.readDouble()
    val a3 = dis.readUTF()

    dis.close()
    fis.close()

    println("a1 : $a1")
    println("a2 : $a2")
    println("a3 : $a3")
}
  • val fos = FileOutputStream("data1.dat")
    • data1.dat 파일을 열고 출력 스트림을 추출하며 데이터가 덮어 씌워진다.
    • 파일이 없다면 새로 만들어진다.
  • val dos = DataOutputStream(fos)
    • fos를 매개변수로 받아 DataOutputStream의 객체인 dos를 생성한다.
    • dos의 메서드를 사용하여 파일을 작성한다.
  • dos.flush()
    • 버퍼에 남아있을지도 모르는 데이터를 모두 전송한다.

📖 ObjectStream

  • 메모리상에 존재하는 객체를 송수신 할 수 있는 필터 스트림이다.
  • 필터 스트림이므로 기본 스트림이 필요하다.

 

 

 

✔️ 예제 코드

fun main() {
    
    saveObjectStream()
    readObjectStream()
}

class TestClass1(var a1:Int, var a2:Int) : Serializable {

    fun printValue(){
        println("a1 : $a1")
        println("a2 : $a2")
    }
}

// ObjectStream으로 쓰기
fun saveObjectStream(){
    val fos = FileOutputStream("data2.dat")
    val oos = ObjectOutputStream(fos)

    val t1 = TestClass1(100, 200)
    val t2 = TestClass1(1000, 2000)

    oos.writeObject(t1)
    oos.writeObject(t2)

    oos.flush()
    oos.close()
    fos.close()
    println("쓰기 완료")
}

// ObjectStream으로 읽기
fun readObjectStream(){
    val fis = FileInputStream("data2.dat")
    val ois = ObjectInputStream(fis)

    val t3 = ois.readObject() as TestClass1
    val t4 = ois.readObject() as TestClass1

    ois.close()
    fis.close()

    t3.printValue()
    t4.printValue()
}
  • 객체를 파일에 저장하기 위해 ObjectOutputStream oos를 선언한다.
  • 선언한 객체 t1과 t2를 writeObject()를 통해 저장한다.

'Computer > Kotlin' 카테고리의 다른 글

[20일차 Kotlin] 스레드(Thread)  (0) 2023.05.24
[20일차 Kotlin] 예외처리(try - catch)  (0) 2023.05.24
[19일차 Kotlin] Map  (0) 2023.05.24
[19일차 Kotlin] Set  (0) 2023.05.24
[19일차 Kotlin] List  (0) 2023.05.24