很搞笑的在打麻将 2022-10-01 09:29 采纳率: 33.3%
浏览 167
已结题

关于ByteArrayOutputStream 引起的 OOM

问题遇到的现象和发生背景

关于ByteArrayOutputStream 引起的 OOM,ByteArrayOutputStream居然还要最大限制,byte数组最长就是int最大值

用代码块功能插入代码,请勿粘贴截图
    public static byte[] getBytesByFile(File file) throws IOException {
        FileInputStream fis = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            fis = new FileInputStream(file);
            byte[] b = new byte[1024 * 1024];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
                System.out.println(bos.size() / 1024 / 1024 + "(MB)");
            }
            byte[] data = bos.toByteArray();
            return data;
        } catch (Exception e) {
            System.out.println("将文件转换成Byte数组失败" + e);
        } finally {
            if (fis != null) {
                fis.close();
            }
            bos.close();
        }
        return null;
    }

运行结果及报错内容
994(MB)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:933)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
    at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
    at javax.crypto.Cipher.doFinal(Cipher.java:2165)
    at cn.hutool.crypto.symmetric.SymmetricCrypto.encrypt(SymmetricCrypto.java:207)
    at com.nice.videoview.App2.encrypt(App2.java:56)
    at com.nice.videoview.App2.main(App2.java:24)
我的解答思路和尝试过的方法

尝试过很多办法,重写过OutputStream子类,发现byte[] 长度最大就是int的最大值

我想要达到的结果

现在计算机内存都16G了, 有时候需要处理一个大1G的文件,转换字节流时候就会报OOM

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月9日
    • 修改了问题 10月1日
    • 创建了问题 10月1日

    悬赏问题

    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?
    • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
    • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
    • ¥15 cmd cl 0x000007b
    • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line