Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 String을 InputStream 객체로 변환하는 방법


ByteArrayInputStreamInputStream 클래스의 하위 클래스로, 스트림을 통해 읽어 들일 수 있는 바이트 데이터를 내부 버퍼에 저장합니다. Java에서는 이 클래스를 활용해 String을 InputStream 객체로 간단하게 변환할 수 있습니다.

변환 방법은 매우 직관적입니다. 먼저 String 클래스의 getBytes() 메서드를 호출하여 문자열을 바이트 배열로 변환한 후, 해당 배열을 ByteArrayInputStream의 생성자에 전달하면 됩니다. 이때 문자 인코딩(예: UTF-8)을 함께 지정하면 실행 환경에 따른 인코딩 불일치 문제를 예방할 수 있습니다.

예제 코드

import java.io.*;

public class StringToInputStreamTest {
    public static void main(String[] args) throws Exception {
        String str = "Welcome to TutorialsPoint";
        InputStream input = getInputStream(str, "UTF-8");
        int i;
        while ((i = input.read()) > -1) {
            System.out.print((char) i);
        }
        System.out.println();
    }

    public static InputStream getInputStream(String str, String encoding)
            throws UnsupportedEncodingException {
        return new ByteArrayInputStream(str.getBytes(encoding));
    }
}

실행 결과

Welcome to TutorialsPoint

코드 설명

위 예제의 핵심은 getInputStream() 메서드입니다. 이 메서드는 전달받은 문자열을 지정된 인코딩("UTF-8") 기준으로 바이트 배열로 변환한 뒤, 그 배열을 기반으로 ByteArrayInputStream 객체를 생성하여 반환합니다.

이후 main() 메서드에서는 반환된 InputStream의 read() 메서드를 반복 호출하며, 스트림의 끝(-1)에 도달할 때까지 데이터를 한 바이트씩 읽어 화면에 출력합니다.

참고 사항

  • 인코딩 명시: getBytes()를 인자 없이 호출하면 JVM의 기본 문자셋이 사용되므로, 실행 환경에 따라 다른 결과가 나올 수 있습니다. 항상 인코딩을 명시하는 것이 안전합니다.
  • 리소스 관리: 실무 코드에서는 try-with-resources 구문을 활용해 스트림이 자동으로 닫히도록 처리하는 것이 권장됩니다.
  • 대안 라이브러리: Apache Commons IO의 IOUtils.toInputStream(str, StandardCharsets.UTF_8)을 사용하면 한 줄로 동일한 작업을 수행할 수 있습니다.