데이터입출력 - 버퍼, 스트림
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 |