Base64InputStream中只有一个字节可用

时间:2014-09-17 16:54:01

标签: java stream base64 apache-commons-codec

我有一个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

1 个答案:

答案 0 :(得分:1)

方法Base64InputStream#available()在流到达结束时返回0,否则返回1(有关详细信息,请参阅JavaDoc) - 换句话说,它不会返回流中的数据量。您应该在流上调用read(),直到available()返回0,并计算返回的字节数,以便在流的长度上获得正确的视图。

您也可以使用以下表达式,并避免完全处理流:

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