데이터입출력 - 버퍼, 스트림

2020. 1. 2. 08:47모바일/Android_Java

스트림

입력스트림, 출력스트림

  • 단일방향으로 연속적으로 흘러가는 것

  • 데이터가 출발지~도착지로 들어간다는 개념

  • 데이터 입력받을 때 : 입력스트림 / 프로그램이 데이터 출력할 때 : 출력스트림

버퍼

넌다이렉트, 다이렉트

ByteBuffer nonDirectBuffer = ByteBuffer.allocate(10);
ByteBuffer directBuffer = ByteBuffer.allocateDirect(10);
  • Direct버퍼는 ByteBuffer만 있는것 같다.
구분 넌다이렉트 다이렉트
사용하는 메모리 JVM의 힙 운영체제
버퍼 생성 시간 버퍼 생성 빠름 느림
버퍼의 크기 작다 크다(큰 데이터)
입출력 성능 낮다 높다(입출력 빈번)
  • 다이렉트 버퍼는 메모리 할당 위해 운영체제 네이티브C 함수 호출
    • 한번 생성해 놓고 재사용
  • 넌다이렉트 버퍼

입출력

구분 IO NIO
입출력 방식 스트림 방식 채널방식
버퍼방식 넌버퍼 버퍼
비동기 방식 지원 안 함 지원
블로킹 / 넌블로킹 블로킹만 지원 블로킹/넌블로킹 지원

스트림, 채널

스트림

  • 데이터 입력하기위해 입력스트림, 출력하기위해 출력스트림 생성해야함.

채널

  • NIO의 기반
  • 양방향으로 입력,출력 가능
  • 하나의 파일에서 데이터 읽고,저장하려면 FileChannel 하나만 생성

넌버퍼, 버퍼

  • IO에서는 출력 스트림이 1바이트 쓰면 입력 스트림이 1바이트 읽음 : 느림
  • 또한, 스트림에서 읽은 데이터를 즉시 처리 : 입력된 데이터으 ㅣ위치를 이동해 가면서 자유롭게 이용할 수 없음.
  • 버퍼(메모리저장소)를 사용해서 복수 개의 바이트를 한꺼번에 입력받고 출력하는것 : 빠름

블로킹, 넌블로킹

  • IO는 read호출하면 데이터 입력 전까지 스레드는 블로킹상태가 된다.
    • 다른일을 할 수 없음
    • 스트림을 닫아야 블로킹에서 나올 수 있다.
  • NIO는 블로킹, 넌블로킹 특징 모두 가지고 있음
    • 스레드 인터럽트해서 빠져나올 수 있음
    • 모든 입출력 작업에 버퍼를 무조건 사용해야 하므로 받은 즉시 처리하는 IO보다는 좀더 복잡하다.

'모바일 > Android_Java' 카테고리의 다른 글

overridePendingTransition  (0) 2020.01.15
체크박스 반대로 표시  (0) 2020.01.06
sp,dp,setTextSize  (0) 2019.12.24
XML 네이밍룰  (0) 2019.12.23
시간구하기  (0) 2019.12.12