큰 base64로 인코딩 된 데이터가 있습니다 (hadoop 파일 시스템의 멋진 파일에 저장 됨). 이 데이터는 원래 gzipped 텍스트 데이터였습니다. 이 인코딩 된 데이터의 청크를 읽고 디코드 한 다음 GZIPOutputStream으로 플러시 할 수 있어야합니다.Base64 데이터의 스트림 디코딩
전체 base64 데이터를 배열에로드하고 Base64.decodeBase64 (byte [])를 호출하는 대신 어떻게 할 수 있습니까?
'\ r \ n'구분 기호까지 문자를 읽고 줄 단위로 디코딩하면 맞습니까? 예 : :
for (int i = 0; i < byteData.length; i++) {
if (byteData[i] == CARRIAGE_RETURN || byteData[i] == NEWLINE) {
if (i < byteData.length - 1 && byteData[i + 1] == NEWLINE)
i += 2;
else
i += 1;
byteBuffer.put(Base64.decodeBase64(record));
byteCounter = 0;
record = new byte[8192];
} else {
record[byteCounter++] = byteData[i];
}
}
슬프게도,이 방법은 모든 사람이 읽을 수있는 출력을 제공하지 않습니다. 이상적으로는 데이터를 읽고, 디코딩하고, 스트리밍하고 싶습니다. 지금
, 나는 gzipoutbyteBuffer.get(bufferBytes);
InputStream inputStream = new ByteArrayInputStream(bufferBytes);
inputStream = new GZIPInputStream(inputStream);
IOUtils.copy(inputStream , gzipOutputStream);
에의 InputStream에 넣고 복사하려고 해요 그리고 그것은 나에게 때 java.io.IOException 제공 :
은'byteBuffer.put (Base64.decodeBase64 (기록)) ' 가 될 안'byteBuffer.put (Base64.encodeBase64 (레코드)) ' –
는'기록 '는 Base64로 인코딩된다. 디코딩 된 데이터를 가져와 ByteBuffer에 추가하려고합니다. –