2016-01-29 1 views
0

Je veux sérialiser une grande structure d'objet pour la stocker dans une base de données sql.Comment obtenir des données blockwise à partir d'un flux de sortie dans Java?

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

Le problème est que le tableau d'octets générée par baos.toByteArray() est grande. Il lance java.lang.OutOfMemoryError et il est trop grand pour le transférer à la base de données à la fois. Je suis à la recherche d'une option pour obtenir le bloc de byte généré par bloc à partir de outputstream pour le faire fonctionner dans une boucle étape par étape.

Répondre

1

Ecrivez le fichier OutputStream initial dans un fichier temporaire (à l'aide de FileOutputStream). aussi, assurez-vous que ferme le ObjectOutputStream ou ce sera un flux mal formé. Enfin, ouvrez votre fichier temporaire en tant que FileInputStream et utilisez-le pour diffuser dans votre base de données. Oubliez le codage en base64 et écrivez l'objet directement dans le flux de sortie du Blob.