안녕하세요
이번 포스팅에서는 URI를 바이트 배열과 Base64 문자열로 변환하는 방법을 설명하겠습니다.
안드로이드 앱 개발을 하다 보면, 갤러리에서 선택한 이미지나 파일을 서버에 전송하거나 다른 사용자와 공유해야 하는 경우가 있습니다.
이때 파일의 URI만 가지고 있다면, 이를 직접 전송할 수 없기 때문에 실제 파일 데이터를 전송 가능한 형태로 변환해야 합니다.
우선 URI 에 대해 간단하게 설명하면,
URI(Uniform Resource Identifier)는 특정 리소스의 위치를 나타내는 고유 식별자입니다. 안드로이드에서 URI는 파일이나 콘텐츠의 위치를 나타내며, 갤러리에서 이미지를 선택할 때 반환되는 값이 바로 URI입니다. 그러나 URI 자체는 파일의 데이터가 아니므로, 서버에 전송하거나 다른 사용자와 공유하려면 URI를 실제 데이터로 변환해야 합니다.
1. URI를 바이트 배열로 변환하기
private byte[] getBytesFromUri(Uri uri) throws IOException {
InputStream inputStream = getContentResolver().openInputStream(uri);
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
InputStream: URI로부터 InputStream을 생성하여 파일 데이터를 읽어옵니다.
ByteArrayOutputStream: 바이트 데이터를 메모리에 저장하기 위한 스트림입니다.
바이트 배열 생성: InputStream에서 데이터를 읽어와 ByteArrayOutputStream에 저장하고, 최종적으로 바이트 배열로 변환합니다.
바이트 배열은 전송 가능한 가장 기본적인 데이터 형태입니다.
이렇게 변환한 바이트 배열을 통해 서버로 데이터를 전송할 수 있습니다. 예를 들어, HTTP POST 요청을 통해 파일을 업로드할 때 이 바이트 배열을 사용합니다
2. URI를 Base64 문자열로 변환하기
private String getBase64FromUri(Uri uri) throws IOException {
InputStream inputStream = getContentResolver().openInputStream(uri);
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
byte[] imageBytes = byteBuffer.toByteArray();
return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}
바이트 배열 생성: URI로부터 바이트 배열을 생성하는 것은 이전 예제와 동일합니다.
Base64 인코딩: Base64.encodeToString() 메서드를 사용하여 바이트 배열을 Base64 문자열로 변환합니다.
Base64 인코딩은 바이너리 데이터를 텍스트로 변환하는 방법입니다.
이 방법은 이메일 전송, JSON 포맷으로 데이터를 전송할 때 매우 유용합니다. Base64 인코딩을 사용하면 이미지 데이터를 문자열 형태로 전송할 수 있습니다.
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] TabHost를 사용하여 탭 화면 만들기 (2) | 2024.09.08 |
---|---|
[Java][Android]SearchView 사용 예시 만들기 (0) | 2024.09.07 |
[JAVA][Android] 이미지뷰 원으로 만들기 / 프로필 사진처럼 만들기 (2) | 2024.09.02 |
[JAVA][Android] 액티비티 재사용 시 onNewIntent로 인텐트 업데이트 (2) | 2024.08.31 |
[JAVA][Android] 안드로이드에서 파일 읽고 쓰기 (0) | 2024.08.30 |