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