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

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

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

1. 添加依赖包

在项目中添加 sun.misc.BASE64Encoder 和 sun.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字节,以提高读取和写入速度。
    • 简化代码结构:可以利用ByteArrayInputStream和ByteArrayOutputStream来减少中间对象的数量。

    4. 常见问题

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

    5. 建议工具

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

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

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

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

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

    你可能感兴趣的文章
    Python制作进度条,原来有这么多方法
    查看>>
    Python制作简单的学生成绩管理系统
    查看>>
    python制作甘特图的基本知识(附Demo)
    查看>>
    python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
    查看>>
    Python到底能做什么?它的优点在哪?
    查看>>
    python利用pytorch库导出图像分割算子
    查看>>
    python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
    查看>>
    python利用excel分析过杀漏失
    查看>>
    python判断汉字数目
    查看>>
    python判断文件是空的,如果是空的,就删除
    查看>>
    python判断密码是否正确_python密码判断是否符合要求的方法
    查看>>
    python判断字符串包含中文_Python 判断字符串是否包含中文
    查看>>
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
    查看>>