如何从 java 中的输出流逐块获取数据?

How to get data blockwise from an outputstream in java?

我想序列化一个大对象结构以将其存储到 sql 数据库。

Object tree = getTree();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(tree);
String objectString = Base64.getEncoder().encodeToString(baos.toByteArray());

问题是baos.toByteArray()生成的字节数组太大了。它抛出 java.lang.OutOfMemoryError 并且立即将其传输到数据库太大了。我正在寻找一个选项,从输出流中逐块获取生成的字节数组,以便在循环中逐步处理它。

将初始 OutputStream 写入临时文件(使用 FileOutputStream)。另外,请确保您 关闭 ObjectOutputStream 否则它将成为格式错误的流。最后,将您的临时文件作为 FileInputStream 打开,并使用它流式传输到您的数据库中。

忘记 base64 编码并将对象直接写入 Blob 的输出流。