java - 如何从java中的输出流中按 block 获取数据?

标签 java object serialization byte outputstream

我想序列化一个大对象结构以将其存储到 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,而且一次性传输到数据库太大了。我正在寻找一个选项来从输出流中逐 block 获取生成的字节数组,以便逐步在循环中对其进行处理。

最佳答案

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

关于java - 如何从java中的输出流中按 block 获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088804/

相关文章:

file - 如何从基于 SwiftUI 文档的应用程序将多个文件保存在包文件夹中?

用于从位于服务器中的 .ser 文件读取对象的 Java 程序

java - Eclipse IDE - 如何在键入时显示类成员

java - 记录数据、在命令行中输入数据、限制整数长度

c - 这些是指针左值吗?

c# - Protobuf-net序列化/反序列化

java - Java 中的异步 File.copy

java - 提高二进制搜索计数更高和更低元素数量的复杂性?

javascript - 为什么在使用解析的字符串时出现错误 'Cannot read property ' name' of null'?

c# - 什么会阻止一个类被序列化?