2010-07-27 22 views
2

Je travaille sur un programme où je compresse beaucoup d'informations et les stocke en octets dans un buffer. Je ne peux pas utiliser ByteBuffer car je ne connais pas la taille finale.Infinite ByteBuffer en Java

Quelle serait une meilleure façon de mettre en œuvre cela?

Répondre

12

Que diriez-vous de ByteArrayOutputStream? Certes, ce n'est pas aussi pratique, mais ça va faire ce que vous voulez. Lorsque vous avez fini de rassembler des octets, vous pouvez simplement sortir un tableau d'octets.

+0

Cela a du sens pour moi, puisque Java représente la compression en tant que flux d'entrée/sortie de toute façon. –

+0

Solution parfaite! – Skuge

+0

Cette méthode a une limite de 2 Go (juste pour clarifier) –

2

Vous devez stocker de grandes quantités d'informations dans un fichier ou dans une base de données et non dans la mémoire. Tôt ou tard, vous manquerez de mémoire.

1

Vous pouvez utiliser Apache MINA IOBuffer mais son algo de redimensionnement est assez cher. Ce que je fais est d'utiliser un tampon d'octets directs, vous n'avez pas besoin de savoir exactement quelle sera sa taille, car l'espace inutilisé consomme de la mémoire virtuelle, pas du tas ou même de la mémoire principale. Sur une machine 64 bits, la mémoire virtuelle est très bon marché.

Vous savez que la taille finale ne sera pas beaucoup plus grande que l'original.