1

我目前正在使用基于流的方法将传入的 Base64 字符转换为 byte[] 使用 Apache commons-codec class org.apache.commons.codec.binary.Base64OutputStream

import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import org.apache.commons.codec.binary.Base64OutputStream;

public class Base64Extractor {
    private final ByteArrayOutputStream result;
    private final OutputStreamWriter sink;

    private Base64Extractor() {
        result = new ByteArrayOutputStream();
        sink = new OutputStreamWriter(new Base64OutputStream(result, false));
    }

    public byte[] getBytes() throws Exception {
        sink.flush();
        sink.close();
        return result.toByteArray();
    }

    public void feed(char[] textCharacters, int textStart, int textLength) throws Exception {
        sink.write(textCharacters, textStart, textLength);
    }
}

feed将 base64 字符一点一点(从某处)放入OutputStreamWriter. 当所有必要的字符都传输完毕后,我只需调用getBytes()来获取我的 byte[] 而无需占用太多​​内存。恕我直言,这段代码非常清晰易读。

最近我了解了 java.util.Base64 类,我现在只想依赖 JDK 提供的类。由于……原因,我想保留流媒体方法。

但是java.util.Base64.getDecoder().wrap()java.io.InputStream老实说,这让我感到困惑。

如何使用java.util.Base64而不是Base64OutputStream将 base64 字符流解码为字节数组?

先感谢您。

4

0 回答 0