Kotlin - mark, reset not supported

2023. 4. 30. 20:45·❌ Error Handling

❌ Kotlin - mark, reset not supported

문제의 코드

inputStream.mark(2)
val bytes2 = ByteArray(2)
inputStream.read(bytes2, 0, 2)
println("바이트 배열 일부만 읽기 1 : " + bytes2.decodeToString())

inputStream.reset()
inputStream.read(bytes2, 0, 2)
println("바이트 배열 일부만 읽기 2 : " + bytes2.decodeToString())

원인

InputStream 객체가 mark()와 reset() 함수를 지원하지 않아서 예외가 발생합니다.

InputStream의 mark()와 reset() 함수는,

InputStream의 내부 포인터 위치를 저장하고, 나중에 해당 위치로 이동할 수 있도록 해줍니다.

그러나 일부 InputStream 구현체는 이러한 기능을 지원하지 않을 수 있습니다.


해결 방법

markSupported() 함수를 사용하여 mark()와 reset() 메소드를 지원하는지 확인한 후,

지원되는 경우에만 해당 함수를 호출하는 것입니다.

if (inputStream.markSupported()) {
    inputStream.mark(2)
    val bytes2 = ByteArray(2)
    inputStream.read(bytes2, 0, 2)
    println("바이트 배열 일부만 읽기 1 : " + bytes2.decodeToString())

    inputStream.reset()
    inputStream.read(bytes2, 0, 2)
    println("바이트 배열 일부만 읽기 2 : " + bytes2.decodeToString())
} else {
    println("mark/reset not supported")
}

이렇게 하면 mark()와 reset() 함수가 지원되는 경우에만 해당 코드 블록이 실행되므로 예외가 발생하지 않습니다.

저작자표시

'❌ Error Handling' 카테고리의 다른 글

Jenkins - Credential & Web hook Error  (0) 2023.06.02
Github Actions - every step must define a uses or run key  (0) 2023.05.24
Spring - N+1 (DB 성능 이슈)  (0) 2023.04.15
Spring - Lazy Initialization Exception  (0) 2023.04.15
Spring - Redis System Exception  (0) 2023.04.15
'❌ Error Handling' 카테고리의 다른 글
  • Jenkins - Credential & Web hook Error
  • Github Actions - every step must define a uses or run key
  • Spring - N+1 (DB 성능 이슈)
  • Spring - Lazy Initialization Exception
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      GStreamer #Pipeline
      Lock #Thread #Concurrency
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Kotlin - mark, reset not supported
    상단으로

    티스토리툴바