English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 튜토리얼

Java 흐름 제어

Java 배열

Java object-oriented(I)

Java object-oriented(II)

Java object-oriented(III)

Java 예외 처리

Java 리스트(List)

Java Queue(큐)

Java Map集合

Java Set集合

Java 입력 출력(I/O)

Java Reader/Writer

Java 다른 주제

Java ByteArrayInputStream 클래스

이 튜토리얼에서는 예제를 통해 Java ByteArrayInputStream 및 그 메서드를 배웁니다.

java.io 패키지의 ByteArrayInputStream 클래스는 입력 데이터 배열(바이트 단위로)을 읽을 수 있습니다.

InputStream 추상 클래스를 상속합니다.

주의하세요:ByteArrayInputStream에서는 바이트 배열을 사용하여 입력 스트림을 생성합니다. 그것은 특정 바이트 배열의 데이터를 저장하는 내부 배열을 포함합니다.

ByteArrayInputStream을 생성합니다

Byte 배열 입력 스트림을 생성하기 위해 먼저 java.io.ByteArrayInputStream 패키지를 가져와야 합니다. 패키지를 가져온 후, 입력 스트림을 생성할 수 있습니다.

//전체 배열을 읽기 위해 ByteArrayInputStream을 생성합니다.
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);

여기서, 우리는 arr 배열에서 전체 데이터를 읽는 입력 스트림을 생성했습니다. 하지만, 배열에서 일부 데이터만 읽는 입력 스트림도 생성할 수 있습니다.

//배열의 일부를 읽기 위해 ByteArrayInputStream을 생성합니다.
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);

여기서, 입력 스트림은 배열의 start 위치에서 배열의 length 개의 바이트를 읽습니다.

ByteArrayInputStream 메서드

ByteArrayInputStream 클래스는 InputStream 클래스에서 제공하는 다양한 메서드를 구현합니다.

read() 메서드

  • read()  - 입력 스트림에서 존재하는 배열에서 단일 바이트를 읽습니다.

  • read(byte[] array)  - 입력 스트림에서 바이트를 읽고 지정된 배열에 저장합니다.

  • read(byte[] array, int start, int length) - 데이터 스트림에서 length 개의 바이트를 읽고, start 위치에서 지정된 배열에 저장합니다.

예제: ByteArrayInputStream 데이터 읽기

import java.io.ByteArrayInputStream;
public class Main {
  public static void main(String[] args) {
    //바이트 배열 생성
    byte[] array = {1, 2, 3, 4};
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);
      System.out.print("입력 스트림에서 읽은 바이트: ");
      for(int i= 0; i < array.length; i++) {
        //바이트 읽기
        int data = input.read();
        System.out.print(data + ");
      }
      input.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

출력 결과

입력 스트림에서 읽은 바이트: 1, 2, 3, 4,

위 예제에서, input이라는 이름의 바이트 배열 입력 스트림을 생성했습니다.

ByteArrayInputStream input = new ByteArrayInputStream(array);

이곳에서 입력 스트림은 지정된 배열의 모든 데이터를 포함하고 있습니다. 데이터를 입력 스트림에서 읽기 위해 read() 메서드를 사용했습니다.

available() 메서드

입력 스트림에 사용 가능한 바이트 수를 얻기 위해 available() 메서드를 사용할 수 있습니다. 예를 들어

import java.io.ByteArrayInputStream;
public class Main {
  public static void main(String args[]) {
    //바이트 배열 생성
    byte[] array = { 1, 2, 3, 4 };
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);
      //사용 가능한 바이트 수 반환
      System.out.println("시작할 때 사용 가능한 바이트 수: "); + input.available());
      //입력 스트림에서 두 바이트를 읽습니다
      input.read();
      input.read();
      //사용 가능한 바이트 수 반환
      System.out.println("끝났을 때 사용 가능한 바이트 수: "); + input.available());
      input.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

출력 결과

시작할 때 사용 가능한 바이트 수: 4
끝났을 때 사용 가능한 바이트 수: 2

위 예제에서

  1. 이미 read() 메서드를 사용하여 입력 스트림에 사용 가능한 바이트 수를 확인했습니다.

  2. 그런 다음, read() 메서드를 사용하여2번째로 입력 스트림에서 읽습니다2개 바이트를 읽습니다.

  3. 지금,2개 바이트 후에, 사용 가능한 바이트가 줄었습니다.2.

skip() 메서드

지정된 바이트를 버리고 건너뛰기 위해 skip() 메서드를 사용할 수 있습니다. 예를 들어

import java.io.ByteArrayInputStream;
public class Main {
  public static void main(String args[]) {
    //바이트 배열 생성
    byte[] array = { 1, 2, 3, 4 };
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);
      //skip() 메서드 사용
      input.skip(2);
      System.out.print("스킵2개字节 후의 입력 스트림: ");
      int data = input.read();
      while (data != -1) {
        System.out.print(data + ");
        data = input.read();
      }
      // close() 메서드
      input.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

출력 결과

skip()2바이트 후의 입력 스트림: 3, 4,

위의 예제에서는 skip() 메서드를 사용하여 입력 스트림에서2바이트 데이터. 따라서 입력 스트림에서 읽지 않습니다1과2.

close() 메서드

입력 스트림을 닫기 위해 close() 메서드를 사용할 수 있습니다.

하지만, ByteArrayInputStream 클래스에서 close() 메서드는 작동하지 않습니다. close() 메서드가 호출된 후에도 이 클래스의 메서드를 사용할 수 있습니다.

ByteArrayInputStream의 다른 메서드

메서드콘텐츠 설명
finalize()close() 메서드가 호출되었는지 확인
mark()읽은 데이터 위치를 입력 스트림에 마크
reset()컨트롤을 입력 스트림에 설정한 마커 포인트로 반환
markSupported()mark()와 reset()를 지원하는지 확인