我有一个String
,它(我认为)是一系列字节的base64表示。我正在尝试使用org.apache.commons.codec.binary.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
方法Base64InputStream#available()
在流到达其末尾时返回0,否则返回1(有关详细信息,请参阅JavaDoc)-换句话说,它不返回流中的数据量。您应该在流上调用read()
,直到available()
返回0,并计算返回的字节数,以获得流长度的正确视图。
您也可以使用以下表达式,避免完全处理流:
byte[] result = org.apache.commons.codec.binary.Base64.decodeBase64(myString);