2011-07-22 3 views
2

Ma tâche est la suivante: Les clients se connectent à ServerSocket et envoient des fichiers avec n'importe quel codage (UTF-8, ISO-8859-5, CP1251, par exemple). Lorsque le serveur reçoit le contenu d'un fichier, le script doit l'insérer dans MySQL.Enregistrer InputStream sur ByteArray

Comme le codage peut être différent, j'ai besoin de sauvegarder le contenu du fichier comme ByteArray (?). Je ne sais pas comment obtenir ByteArray à partir de Socket.getInputStream().

Aidez-nous s'il vous plaît.

Merci d'avance!

Répondre

2

Commons IO - http://commons.apache.org/io/

toByteArray(Reader input, String encoding) Obtenez le contenu d'un lecteur comme un octet [] en utilisant le codage de caractères spécifié.

http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html

+0

Je ne peux pas l'utiliser, parce que le serveur ne sais pas ce encodage utilisation du client. – smie

+2

@ user857923: essayez 'toByteArray (entrée InputStream)' (également dans Commons IO IOUtils) à la place. –

4
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] tmp = new byte[4096]; 
int ret = 0; 

while((ret = inputStream.read(tmp)) > 0) 
{ 
    bos.write(tmp, 0, ret); 
} 

byte[] myArray = bos.toByteArray(); 
+0

Merci! Avec enregistrer le document dans MySQL - effacer. – smie

+0

Encore une question. Comment je peux envoyer au document client comme byte array à Socket OutputStream sans spécifier l'encodage? – smie

+0

J'ai compris ... OutputStream OS = DataTransferSocket.getOutputStream(); puis OS.write (FileContent); dans le tableau d'octets. Merci pour tout! – smie