Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Base64InputStream中只有一个字节可用_Java_Stream_Base64_Apache Commons Codec - Fatal编程技术网

Java Base64InputStream中只有一个字节可用

Java Base64InputStream中只有一个字节可用,java,stream,base64,apache-commons-codec,Java,Stream,Base64,Apache Commons Codec,我有一个字符串,它(我认为)是一系列字节的base64表示。我正在尝试使用org.apache.commons.codec.binary.Base64InputStream获取字节。然而,显然这个流只有一个字节可用 该字符串是使用Base64OutputStream生成的,原始字节数组的长度为398字节 我真的不知道我在做什么,但我认为Base64InputStream应该有398字节可用,不是吗?我做错了什么 String myString = "rO0ABXNyABRqY..."; // A

我有一个
字符串
,它(我认为)是一系列字节的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());
输出:

字符串长度:398
byteArrayInputStream中的可用字节数:398
base64InputStream中的可用字节:1

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

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

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