De quel type est le meilleur pour gérer les données binaires en Java?
Je suis l'obtention de certains documents à partir du web et beaucoup d'entre eux sont des fichiers binaires (exécutables, PDF, etc.). En Java, qu'est-ce que le type approprié pour contenir les données binaires jusqu'à ce que l'enregistrer dans la base de données? Puis-je utiliser une Chaîne de caractères pour cela?
OriginalL'auteur Renato Dinhani | 2012-03-07
Vous devez vous connecter pour publier un commentaire.
Utiliser un tableau d'octets (byte[]) ou InputStream (par exemple ByteArrayInputStream). Cordes de Java ne sont pas un bon récipient pour le générique de données binaires.
Apache bibliothèque commons-io a quelques belles classes d'utilitaire pour traiter les octets et les ruisseaux.
par exemple IOUtils.toByteArray(InputStream)
ByteBuffer a été introduit dans le cadre de Java NIO, disponible en Java 4 (1.4) et plus tard. Spécialisés dans les scénarios, il peut avoir des avantages de performance à l'aide d'un byte[]. Il a aussi quelques méthodes pratiques. J'ai toujours utilise habituellement byte[], car il est plus largement connu, de plus en plus commun dans les Api, et presque toujours effectue assez bien.
OriginalL'auteur Mike Clark
Un tableau de
byte
sC'est pourquoi vous voyez qu'il est utilisé dans FileInputStream
OriginalL'auteur Adam
Pour la petite quantité de données, utilisez une
byte[]
mais pour les fichiers binaires (pour être stocké dans une base de données d'objets Blob), vous devez utiliser un fichier temporaire queInputStream
. JavaEE le fait aussi pour les fichiers téléchargés. Il n'est pas bon pour le serveur de la performance de la mémoire des déchets de type byte[]. Imaginez une webapp la prestation de dix fichier PDF d'environ 200 MO. Le serveur aura besoin de plus de 2 go de RAM juste pour la webapp.Également à l'aide d'un InputStream JDBC permet de transmettre les données à la base de données (pour la plupart des pilotes JDBC, pas de MySql, qui va contenir les données en mémoire deux fois de plus pour le client et le serveur).
Vous pouvez avoir un coup d'oeil sur Apache Commons FileUpload et setBlob() de
PreparedStratement
.OriginalL'auteur Arne Burmeister
Utiliser un
byte[]
ou unByteBuffer
si vous avez besoin d'simplifié au niveau des octets de manipulation.Strictement parlant, vous pourrait utiliser une chaîne de caractères, mais il ya de nombreux pièges liés à l'encodage des caractères, de sorte que vous ne devriez pas utiliser des chaînes sans une très bonne raison de le faire.
OriginalL'auteur maerics
Ne pas enregistrer des fichiers directement à une base de données. Les enregistrer dans un système de fichiers en lieu et enregistrer le chemin d'accès au fichier dans la base de données. C'est ce que sont les systèmes de fichiers pour. Vous obtiendrez des problèmes de performances si vous avez des trucs binaire des fichiers dans votre base de données.
OriginalL'auteur orkoden