使用BASE64Decoder完成文件与二进制之间互相转化
2023-09-14 09:06:15 时间
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
\* 使用sun.misc.BASE64Decoder和sun.misc.BASE64Encoder
\* 完成文件转化二进制之间互相转化
*
*/
public class BASE64test {
/**
*
\* @param path 目标文件
\* @param path2 生成文件
*/
public static void encodeBase64File(String path,String path2) throws Exception {
File file = new File(path);//创建目标文件对象
FileInputStream inputFile = new FileInputStream(file);//输入流
FileOutputStream out=new FileOutputStream(path2);//输出流
OutputStreamWriter osw=new OutputStreamWriter(out);//文字写入流
//文件读取时未使用缓冲,一次性读取
byte[] buffer = new byte[(int) file.length()];
inputFile.read(buffer);
inputFile.close();
//new BASE64Encoder().encode(buffer返回String类型的字符串
//再使用文字输出流将其写出
osw.write((new BASE64Encoder().encode(buffer)));
osw.close();
out.close();
}
public static void main(String[] args) {
String path="C:\\Users\\Public\\Pictures\\Sample Pictures\\EAG42EqA_2560x1600.jpg";
String path1="C:\\Users\\Public\\Pictures\\Sample Pictures\\EAG42EqA_2560x16002.txt";
try {
encodeBase64File(path,path1);
File file=new File(path1);
FileInputStream fis=new FileInputStream(file);
FileOutputStream fos=new FileOutputStream("C:\\Users\\Public\\Pictures\\Sample Pictures\\EAG42EqA_2560x16003.jpg");
BASE64Decoder bd=new BASE64Decoder();
byte[] b=bd.decodeBuffer(fis);
fos.write(b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java安装的目录下的jre/lib/rt.jar中有以下两个类实现base64的编码和解码:
sun.misc.BASE64Encoder
sun.misc.BASE64Decoder
下面是java实现:
public class Imagebase64 {
static BASE64Encoder encoder = new sun.misc.BASE64Encoder();
static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
public static void main(String[] args) {
System.out.println(getImageBinary()); // image to base64
base64StringToImage(getImageBinary()); // base64 to image
}
static String getImageBinary() {
File f = new File("d://in.jpg");
try {
BufferedImage bi = ImageIO.read(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] bytes = baos.toByteArray();
return encoder.encodeBuffer(bytes).trim();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
static void base64StringToImage(String base64String) {
try {
byte[] bytes1 = decoder.decodeBuffer(base64String);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 = ImageIO.read(bais);
File f1 = new File("d://out.jpg");
ImageIO.write(bi1, "jpg", f1);
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关文章
- Python 分割合并大文件
- 南域剑盟文件捆绑器2010
- PHP获取文件扩展名的4种方法
- 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 反汇编二进制机器码 | 打印反汇编数据 )
- Go语言自定义二进制文件的读写操作
- Linux下查看编辑二进制文件:hexedit神器详解程序员
- java文件操作 之 创建文件夹路径和新文件详解编程语言
- 文件的文本打开方式和二进制打开方式的区别
- C++二进制文件读写(read和write)详解
- Linux中掌握删除文件命令的必要性(linux中删除文件命令)
- Linux下查看二进制文件信息(linux二进制查看)
- 文件Linux转换二进制文件:指南(linux转换二进制)
- Chromium自动为Debian用户下载了可监听语音的二进制文件
- 管理Linux文件管理技巧(linux文件)
- Linux下显示二进制文件的方法(linux显示二进制文件)
- Linux查看二进制文件的有效方法(linux查看二进制文件)
- Oracle数据库中二进制文件的存放格式(oracle二进制文件存放格式)
- 使用Oracle生成安全的二进制文件(oracle 二进制文件)
- Redis默认文件位置管理分析(redis默认文件地址)
- 一键关闭服务器危险端口BAT文件安防篇[端口介绍]
- C#读取二进制文件方法分析