我想序列化一个大对象结构以将其存储到 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/