1

我有一个String(我认为)是一系列字节的 base64 表示。我正在尝试使用org.apache.commons.codec.binary.Base64InputStream. 然而,显然这个流只有一个字节可用。

该字符串是使用 a 生成的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
4

1 回答 1

1

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

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

byte[] result = org.apache.commons.codec.binary.Base64.decodeBase64(myString);
于 2014-09-17T22:17:03.213 回答