我想序列化一个大对象结构,将其存储到一个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
,并且可以立即将其传输到数据库。我正在寻找一个选项,从输出流中逐块获取生成的字节数组,逐步循环使用它。
答案 0 :(得分:1)
将初始OutputStream写入临时文件(使用FileOutputStream)。此外,请确保关闭 ObjectOutputStream,否则它将是一个格式错误的流。最后,将您的临时文件作为FileInputStream打开,并使用它来流式传输到您的数据库中。
答案 1 :(得分:0)
忘记base64编码并将对象直接写入Blob的输出流。