Dom4j封装二进制图片数据

来源:互联网 发布:懂球帝是腾讯软件吗 编辑:程序博客网 时间:2024/06/01 18:55

     最近在项目中遇到了将二进制图片文件封装为XML格式的要求。最初的设想是将二进制文件转换为String类型封装在XML中。

  编写代码时发现,将二进制数据文件直接转换为String类型封装到XML中时,无法解析XML文件,因为图片String中有大量的特殊字符。

 最后只能使用GOOGLE, 发现可以采用base64编码的方式将二进制图片文件转换String类型.

参考了:

 http://blog.sina.com.cn/s/blog_674bc8f90100o3e5.html 的实现将其转换成功并且封装为格式.


 进行相应的测试后,发现解析后的图片格式无法显示数据,使用工具打开图片文件时,显示文件数据丢失。

百思不得其解,再次GOOGLE,这次就不太容易了,早了半天也没有解决,一个偶然的机会采用了axis.jar包中的Base64工具类进行base64编码,解码,测试成功

 回个头来,单独用jdk提供的base64编码工具类进行数据操作,发现编码,解码没有问题

 进行debug调试,开始也没有发现问题。一个偶然的机会发现base64编码后的数据是有换行符的,二生成的xml数据后,换行符被转换为了空格.

立马进行调试

new BASE64Decoder().decodeBuffer(content1.replaceAll(" ", "\n"));

测试通过,问题出在dom4j将\n转换为了" “ 导致jdk的BASE64解码操作出错。

用google查了一下dom4j将\n转换为" "的问题,.

dom4j是可以避免转换的,方法如下:

        OutputFormat format = new OutputFormat("", true);
        format.setEncoding("UTF-8");
        //xml输出器
        StringWriter out = new StringWriter();
        XMLWriter xmlWriter = new XMLWriter(out, format);
        try {
            xmlWriter.write(doc);
            xmlWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
       return out.toString();

将document对象转换为xml字符串时,不会讲\n转换为空格


        File file = new File("D:/Demo/WEBSERVICE.jpg");
        InputStream in = new FileInputStream(file);
        

        byte[] buffer = new byte[in.available()];
        int i = 0;

        i=in.read(buffer);
        String a = new BASE64Encoder().encode(buffer);



        byte[] bytes =  new BASE64Decoder().decodeBuffer(content1);
        FileOutputStream out = new FileOutputStream("D:/Demo/WEBSERVICE1.jpg");
        out.write(bytes);
        out.close();