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

时间:2016-01-29 16:01:46

标签: 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,并且可以立即将其传输到数据库。我正在寻找一个选项,从输出流中逐块获取生成的字节数组,逐步循环使用它。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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