当前位置: 首页 > 面试题库 >

在Java中创建Base64字符串时出现OutOfMemory吗?

萧韬
2023-03-14
问题内容

我使用ostermillerutils库创建base64字符串,但是如果图像很重,则会出现OutOfMemory错误。如果我尝试转换的图像是简单图像,则代码工作正常。

public String createBase64String(InputStream in) {
    //collect = new ByteArrayOutputStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    try {
        for(int readNum; (readNum = in.read(buf)) != -1; ) {
            bos.write(buf, 0, readNum);
        }
    }
    catch (IOException ex) {
        Logger.getInstance().debug("XML createBase64String: IOException");
        return null;
    }
    finally {
        if (in != null) {
            try {
                in.close();

            }
            catch (IOException ex) {
                ;
            }
        }
    }
    byte[] ba = bos.toByteArray();
    String coded = Base64.encodeToString(ba);
    return coded;
}

我也尝试这样做,但是当我尝试对它进行解码时,base64是不正确的。

public void createBase64String(InputStream in) throws IOException {
    //collect = new ByteArrayOutputStream();

    byte[] buf = new byte[1024];
    int readNum = 0;

    try {
        while((readNum = in.read(buf)) != -1)  
         {    
            smtp.addBase64(Base64.encodeBase64String(buf));
         }  
    }
    catch (IOException ex) {
        Logger.getInstance().debug("XML createBase64String: IOException");
    }
    finally {
        if (in != null) {
            in.close();
        }
    }

}

请为JDK 1.4和更高版本的Java建议解决方案。


问题答案:

我通过使用javabase64-1.3.1.jar库解决了我的问题。

OutputStream fos2 = FileUtil.getOutputStream(base64FileName, FileUtil.HDD);
InputStream  in2 = FileUtil.getInputStream(fileName, FileUtil.HDD);
Base64.encode(in2, fos2);
in2.close();
fos2.close();

我首先将base64字符串存储到文本文件中。

public void createBase64String(InputStream in) throws IOException {
    baos = new ByteArrayOutputStream();
    byte[] buf = new byte[BUFFER_SIZE];
    int readNum = 0;
    smtp.addBase64("\t\t");

    try {
        while ((readNum = in.read(buf)) >= 0) {
            baos.write(buf, 0, readNum);
            smtp.addBase64(baos.toString());
            baos.reset();
        }
    }
    catch (IOException ex) {
        LogUtil.error("Sending of Base64 String to SMTP: IOException: " + ex);
    }
    finally {
        if (in != null) {
            in.close();
            baos.close();
        }
    }

    baos = null;
    buf = null;
}

然后将每行发送到smtp的套接字输出流。



 类似资料:
  • 问题内容: 我在一个字符串中有Base64编码的二进制数据: 我想创建一个包含此数据的URL并将其显示给用户: 我一直无法弄清楚如何创建BLOB。 在某些情况下,我可以通过使用URL 来避免这种情况: 但是,在大多数情况下,URL太大了。 如何在JavaScript中将Base64字符串解码为BLOB对象? 问题答案: 该函数会将Base64编码的字符串解码为一个新字符串,并为二进制数据的每个字节

  • 本文向大家介绍java实现图片转base64字符串 java实现base64字符串转图片,包括了java实现图片转base64字符串 java实现base64字符串转图片的使用技巧和注意事项,需要的朋友参考一下 java 图片转base64字符串、base64字符串转图片,具体内容如下 1. 图片转base64字符串: 2. base64字符串转图片: 3. 测试: 效果图: 以上就是本文的全部内

  • 假设N是根号,三者将创建N-1,N-2,N-3的左中右节点。 EX: 等。 我的 TreeNode 类具有以下变量: 每当我构造一个整数大于 28 的树时,我都会得到一个 OutOfMemoryError。我的递归方法是效率低下还是很自然?谢谢!

  • 问题内容: 为什么以下算法对我来说不停止?(str是我要搜索的字符串,findStr是我要寻找的字符串) 问题答案: 最后一行造成了问题。永远不会为-1,所以会有无限循环。可以通过将代码的最后一行移到if块中来解决此问题。

  • 我有一个代表学生实体的字符串: 学生实体类是: 对于解析字符串,我使用以下代码: 响应1是一个httpresponse的主体,它代表我来自描述的字符串。 例外情况:

  • 我修改了一个phonegap插件。Java部分输出一个base64字符串: 然后我将它传递给某个Javascript,然后将字符串发送给服务器。我已经检查了.php文件接收到的字符串,base64字符串是相同的。然而,当我解码base64字符串时,它似乎已损坏。为了更好的示例,将此文本文件的内容复制到解码器中。 注意:当.php文件尝试解码它的数据:image/png;base64在前面时,我只是