Java/문자열

[Java]InputStream을 문자열로 변환하는 방법

DevStory 2022. 8. 18.

InputStream을 문자열로 변환하는 방법

이번 포스팅은 InputStream을 문자열로 변환할 수 있는 몇 가지 방법을 소개합니다.

 

Java 1.8 버전에서 사용할 수 있습니다.


InputStream 클래스

InputStream 클래스는 바이트 기반 입력 스트림의 최상위 추상 클래스입니다.

 

InputStream 클래스에서 파생되는 클래스는 BufferedInputStream, ByteArrayInputStream, SequenceInputStream 등.. 다양한 클래스가 존재합니다.

 

InputStream에는 바이트로 변환된 모든 데이터(파일, 사진, 이미지, 문자, 특수기호 등)를 가질 수 있지만, 바이트를 원본 데이터로 변환하는 기능은 제공하지 않습니다.

 

따라서, 아래 방법들을 사용하여 InputStream에 할당된 바이트를 문자열로 변환합니다.


방법 1. ByteArrayOutputStream으로 변환 후 문자열로 변환

첫 번째 방법으로 InputStream을 ByteArrayOutputStream으로 변환 후 문자열로 변환합니다.

 

InputStream을 ByteArrayOutputStream으로 변환하기 위해 InputStream 클래스의 read() 메서드를 사용하여 바이트를 ByteArrayOutputStream에 할당합니다.

 

ByteArrayOutputStream로 변환하는 작업이 완료되면 toString() 메서드를 호출하여 문자열로 변환합니다.

public static void main(String args[]) {
  try {
    String string = "Hello, 안녕!";
    InputStream inputStream = new ByteArrayInputStream(string.getBytes());

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    for (int data = inputStream.read(); data != -1; data = inputStream.read()) {
      byteArrayOutputStream.write(data);
    }

    System.out.println(byteArrayOutputStream.toString());
  } catch (IOException ex) {
    ex.printStackTrace();
  }
}

[실행 결과]

Hello, 안녕!

방법 2. InputStreamReader로 변환 후 문자열로 변환

두 번째 방법으로 InputStream을 InputStreamReader로 변환 후 문자열로 변환합니다.

 

InputStreamReader 생성자 함수에 InputStream 객체를 전달하면, InputStreamReader로 변환됩니다.

 

InputStreamReader 클래스의 read() 메서드를 사용하여 char 타입으로 변환된 데이터를 StringBuilder에 추가합니다.

 

모든 데이터를 추가했으면, toString() 메서드를 호출하여 문자열로 변환합니다.

public static void main(String args[]) {
  try {
    String string = "Hello, 안녕!";
    InputStream inputStream = new ByteArrayInputStream(string.getBytes());

    Reader reader = new InputStreamReader(inputStream);

    StringBuilder result = new StringBuilder();

    for (int data = reader.read(); data != -1; data = reader.read()) {
      result.append((char)data);
    }

    System.out.println(result.toString());
  } catch (IOException ex) {
    ex.printStackTrace();
  }
}

[실행 결과]

Hello, 안녕!

방법 3. BufferedReader 변환 후 문자열로 변환

세 번째 방법으로 InputStream을 BufferedReader로 변환 후 문자열로 변환합니다.

 

InputStream을 BufferedReader로 변환하기 위해서는 다음 과정을 거쳐야 합니다.

 

InputStream을 InputStreamReader로 변환 → InputStreamReader을 BufferedReader로 변환

 

BufferedReader로 변환하는 과정이 완료되면, read() 메서드를 사용하여 char 타입으로 변환된 데이터를 StringBuilder에 추가합니다.

 

모든 데이터를 추가했으면, toString() 메서드를 호출하여 문자열로 변환합니다.

public static void main(String args[]) {
  try {
    String string = "Hello, 안녕!";
    InputStream inputStream = new ByteArrayInputStream(string.getBytes());

    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

    StringBuilder result = new StringBuilder();

    for (int data = reader.read(); data != -1; data = reader.read()) {
      result.append((char)data);
    }

    System.out.println(result.toString());
  } catch (IOException ex) {
    ex.printStackTrace();
  }
}

[실행 결과]

Hello, 안녕!

방법 4. BufferedReader로 변환 후 Stream API 사용

마지막 방법은 세 번째 방법에서 Stream API를 사용하여 코드를 간략하게 만듭니다.

 

InputStream을 BufferedReader로 변환 후 lines() 메서드 뒤에 collect() 메서드를 호출합니다.

public static void main(String args[]) {
  String string = "Hello, 안녕!";
  InputStream inputStream = new ByteArrayInputStream(string.getBytes());

  BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

  String strValue = reader.lines().collect(Collectors.joining(System.lineSeparator()));

  System.out.println(strValue);
}

[실행 결과]

Hello, 안녕!
반응형

댓글