ByteArrayInputStream은 InputStream 클래스의 하위 클래스로, 스트림을 통해 읽어 들일 수 있는 바이트 데이터를 내부 버퍼에 저장합니다. 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)을 사용하면 한 줄로 동일한 작업을 수행할 수 있습니다.