博客
关于我
工作中遇到的问题:PDF转成二进制流的字符串,及将二进制流反转成PDF20210520
阅读量:725 次
发布时间:2019-03-21

本文共 2682 字,大约阅读时间需要 8 分钟。

关于Java Base64编码与解码的优化与解决方案

1. 添加依赖包

在项目中添加 sun.misc.BASE64Encodersun.misc.BASE64Decoder 包。

注意:在某些IDE或环境中,这些类可能会被限制访问,例如在.jreSystem Library中,权限可能不允许访问这些类。为了解决此问题,您需要:

  • 右键项目 → 属性 → Java Build Path → JRE System Library → 紧急中心单击,进入属性窗口。
  • 在“访问规则”部分,找到sun.misc包,右键选择“可访问性”并输入*, 依次输入允许的版本号。
  • 单击确定。
  • 2.兼容性问题

    如果您遇到无法访问 sun.misc.BASE64Encoder 或其他问题,建议考虑以下解决方案:

    • 使用更现代的 Base64 编码工具:比如 javax.xml.bind.DatatypeConverter(适用于 Java 8 及以上)或 Apache 的 Base64 库。
    • 强制访问 sun.misc 包:如前所述,通过 IDE 配置访问权限。

    3. 关于 Base64 编码与解码

    以下是对代码的解释及优化建议:

    3.1 fromPdfToBinary方法
    private static String fromPdfToBinary(String filePath) {    try {        FileInputStream fis = new FileInputStream(new File(filePath));        BufferedInputStream bis = new BufferedInputStream(fis);        ByteArrayOutputStream baos = new ByteArrayOutputStream();        BufferedOutputStream bos = new BufferedOutputStream(baos);        byte[] bytes = new byte[1024];        int len = bis.read(bytes);        while (len != -1) {            bos.write(bytes, 0, len);            len = bis.read(bytes);        }        bos.flush();        byte[] bys = baos.toByteArray();        return encoder.encodeBuffer(bys).trim();    } catch (FileNotFoundException | IOException e) {        e.printStackTrace();    }}

    优化建议

    • 读取缓冲策略:使用适当的缓冲大小或直接使用DataOutputStream来提高读取效率。
    • 密封尝试块:使用try-with-resources来自动处理输入流和输出流资源。
    • 异常处理:确保对所有捕获的异常进行处理,并提供友好的错误信息。
    3.2 fromBinaryToPdf方法
    private static void fromBinaryToPdf(String pdfBase64Str, String filePath) {    try {        byte[] bytes = decoder.decodeBuffer(pdfBase64Str);        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);        BufferedInputStream bis = new BufferedInputStream(bais);        File file = new File(filePath);        FileOutputStream fos = new FileOutputStream(file);        BufferedOutputStream bos = new BufferedOutputStream(fos);        byte[] buffers = new byte[1024];        int len = bis.read(buffers);        while (len != -1) {            bos.write(buffers, 0, len);            len = bis.read(buffers);        }        bos.flush();    } catch (IOException e) {        e.printStackTrace();    } finally {        try {            bis.close();            fos.close();            bos.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

    优化建议

    • 确保正确关闭流:在finally块中确保所有流都被正确关闭,避免资源泄漏。
    • 提高读取效率:使用适当的缓存大小,如1024字节,以提高读取和写入速度。
    • 简化代码结构:可以利用ByteArrayInputStreamByteArrayOutputStream来减少中间对象的数量。

    4. 常见问题

    • PDF打印字体不符:首先确保默认的打印字体设置正确,或者在代码中手动指定字体。
    • 文件路径问题:确保函数参数filePathpdfBase64Str用法正确,路径完整。

    5. 建议工具

    如果不想手动处理 Base64 编码,可以使用在线工具或开源库:

    • Ez APIs:提供多种编码工具。
    • ** Apache Commons Codec**:提供Base64编码功能。
    • Google Closure库:支持 Base64 转换。

    建议参考相关文档,确保您的工具支持需要的编码和解码方式。

    如果您有更多技术问题,欢迎随时咨询!

    转载地址:http://yidgz.baihongyu.com/

    你可能感兴趣的文章
    LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
    查看>>
    localhost:5000在MacOS V12(蒙特利)中不可用
    查看>>
    mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
    查看>>
    Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
    查看>>
    MangoDB4.0版本的安装与配置
    查看>>
    Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
    查看>>
    mapping文件目录生成修改
    查看>>
    MapReduce程序依赖的jar包
    查看>>
    mariadb multi-source replication(mariadb多主复制)
    查看>>
    MariaDB的简单使用
    查看>>
    MaterialForm对tab页进行隐藏
    查看>>
    Member var and Static var.
    查看>>
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    Moment.js常见用法总结
    查看>>