
耐性与骨气为您分享以下优质知识
将base64转换为二进制流的方法主要分为以下两种情况:处理包含Data URI前缀的base64字符串和纯base64编码数据。以下是具体实现方式:
一、处理包含Data URI前缀的base64字符串
当base64数据以`data:image/png;base64,`等格式存在时,需先提取实际编码部分,再转换为二进制流。
示例代码(Javascript):
```javascript
function dataURLtoBlob(dataurl) {
const arr = dataurl.split(",");
const mime = arr.match(/data:image/w+;base64,/) ? arr : "";
const bstr = atob(arr);
const u8arr = new Uint8Array(bstr.length);
for (let i = 0; i < bstr.length; i++) {
u8arr[i] = bstr.charCodeAt(i);
}
return new Blob([u8arr], { type: mime });
}
```
示例代码(Java):
```java
public static void dataURLtoBlob(String dataurl) throws IOException {
String[] parts = dataurl.split(",");
String type = parts.split(";").split(":");
String data = parts;
byte[] imageBytes = base64.getDecoder().decode(data);
try (FileOutputStream fos = new FileOutputStream("output.png")) {
fos.write(imageBytes);
}
}
```
二、纯base64编码数据转换
对于不含Data URI前缀的base64字符串,可直接使用`atob`或`base64.getDecoder().decode`进行解码,生成二进制数据。
示例代码(Javascript):
```javascript
function base64ToArrayBuffer(base64) {
const binaryString = atob(base64);
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
```
示例代码(Java):
```java
public static byte[] base64ToBytes(String base64) throws IOException {
return base64.getDecoder().decode(base64);
}
```
三、注意事项
若需将二进制数据转换为Blob对象,需指定正确的MIME类型(如`image/png`)。
处理大文件时,建议使用`Uint8Array`或`ArrayBuffer`直接操作二进制数据,避免频繁创建中间字符串。
不同语言对base64解码的支持略有差异,如Javascript的`atob`在处理非标准base64时可能失败,需结合正则表达式预处理。
通过以上方法,可高效实现base64与二进制流之间的转换。