Java ByteArrayOutputStream 마스터하기: 메서드, 사용법, 실전 예제
Java ByteArrayOutputStream 마스터하기
이 튜토리얼은 Java의 ByteArrayOutputStream, 핵심 메서드, 실전 예제를 탐구하여 바이트 수준 출력을 효율적으로 작성하는 데 도움을 줍니다.
java.io 패키지의 ByteArrayOutputStream 클래스는 필요에 따라 자동으로 늘어나는 내부 바이트 배열에 데이터를 쓸 수 있게 합니다. 추상 OutputStream 클래스를 확장하여 메모리 내 바이트 조작을 위한 다재다능한 도구가 됩니다.
참고: 클래스는 주문형으로 확장되는 내부 버퍼를 유지하므로, 정확한 크기를 알지 않는 한 용량을 미리 정의할 필요가 없습니다.
ByteArrayOutputStream 생성하기
ByteArrayOutputStream을 생성하려면 java.io.ByteArrayOutputStream을 임포트하고 인스턴스화합니다. 기본적으로 버퍼는 32바이트에서 시작합니다:
// 기본 크기
ByteArrayOutputStream out = new ByteArrayOutputStream();
큰 페이로드가 예상된다면 초기 용량을 지정할 수도 있습니다:
// 커스텀 크기
ByteArrayOutputStream out = new ByteArrayOutputStream(int size);
size 매개변수는 바이트 단위의 초기 버퍼 길이를 설정합니다.
ByteArrayOutputStream의 핵심 메서드
OutputStream 구현체로서 ByteArrayOutputStream은 몇 가지 필수 메서드를 제공합니다:
write() 메서드
write(int b) - 단일 바이트를 스트림에 씁니다.
write(byte[] b) - 전체 바이트 배열을 씁니다.
write(byte[] b, int off, int len) - 인덱스 off부터 len 바이트를 씁니다.
writeTo(ByteArrayOutputStream out1) - 현재 버퍼를 다른 ByteArrayOutputStream에 복사합니다.
예제: ByteArrayOutputStream에 데이터 쓰기
import java.io.ByteArrayOutputStream;
class Main {
public static void main(String[] args) {
String data = "This is a line of text inside the string.";
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] array = data.getBytes();
out.write(array);
String streamData = out.toString();
System.out.println("Output stream: " + streamData);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과
Output stream: This is a line of text inside the string.
이 예제에서 write()는 바이트 배열을 스트림으로 전송하고, toString()은 누적된 데이터를 텍스트로 조회합니다.
ByteArrayOutputStream에서 데이터 접근하기
toByteArray() - 내부 바이트 배열의 사본을 반환합니다.
toString() - 플랫폼 기본 캐릭터셋을 사용하여 버퍼를 String으로 변환합니다.
아래는 두 메서드 모두를 시연합니다:
import java.io.ByteArrayOutputStream;
class Main {
public static void main(String[] args) {
String data = "This is data.";
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(data.getBytes());
byte[] byteData = out.toByteArray();
System.out.print("Data using toByteArray(): ");
for (int i = 0; i < byteData.length; i++) {
System.out.print((char) byteData[i]);
}
String stringData = out.toString();
System.out.println("\nData using toString(): " + stringData);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과
Data using toByteArray(): This is data.
Data using toString(): This is data.
여기서는 표시를 위해 각 바이트를 문자로 캐스팅하여, 내부 배열이 텍스트에 어떻게 매핑되는지 보여줍니다.
close() 메서드
ByteArrayOutputStream에서 close()를 호출해도 악영향은 없습니다. 스트림은 이후에도 계속 사용할 수 있습니다. 이 동작은 외부 자원 해제가 필요 없는 메모리 내 버퍼 설계와 일치합니다.
추가 메서드
| 메서드 | 설명 |
size() | 현재까지 작성된 바이트 수를 반환합니다. |
flush() | 내부 버퍼를 리셋하여 스트림을 효과적으로 비웁니다. |
더 고급 사용법은 공식 Java SE 문서를 참조하세요.
Java ByteArrayOutputStream (공식 문서)