2014-09-17 6 views
1

나는 String을 가지고 있는데, 이는 내가 생각하기에 일련의 바이트의 base64 표현입니다. org.apache.commons.codec.binary.Base64InputStream을 사용하여 바이트를 얻으려고합니다. 그러나 분명히이 스트림은 단 하나의 바이트 만 사용할 수 있습니다.Base64InputStream에서 한 바이트 만 사용할 수 있습니다.

문자열은 Base64OutputStream을 사용하여 생성되었으며 원래 바이트 배열은 398 바이트 길이입니다.

내가 뭘하는지 잘 모르지만, Base64InputStream에는 398 바이트가 있어야한다고 생각합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

String myString = "rO0ABXNyABRqY..."; // Actual string is longer 
ByteArrayInputStream byteArrayIS = new ByteArrayInputStream(myString.getBytes(StandardCharsets.UTF_8)); 
Base64InputStream base64IS = new Base64InputStream(byteArrayIS); 

System.out.println("String length : " + myString.length()); 
System.out.println("Available bytes in byteArrayInputStream: " + byteArrayIS.available()); 
System.out.println("Available bytes in base64InputStream: " + base64IS.available()); 

출력 :

String length : 398 
Available bytes in byteArrayInputStream: 398 
Available bytes in base64InputStream: 1 

답변

1

중 0 스트림의 끝에 도달하거나 한 경우 그렇지 않은 경우 (자세한 내용은 JavaDoc 참조) 반환 Base64InputStream#available() 방법 - 즉 그 금액을 반환하지 않습니다 스트림의 데이터 available()이 0을 반환 할 때까지 read()을 스트림에 호출하고 반환 된 바이트 수를 계산하여 스트림 길이에 대한 올바른보기를 가져와야합니다.

은 또한 대신 다음 식을 사용하고, 모두 스트림을 다루는 피할 수 :

byte[] result = org.apache.commons.codec.binary.Base64.decodeBase64(myString); 
+0

그것은 참으로 문서에 있습니다. 내가 어떻게 그것을 놓쳤는 지 모르겠다. – abl