关于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