2011-12-06 4 views
1

Je souhaite lire du texte et des données binaires dans un flux, où le flux peut être un fichier ou une connexion URL. Les deux flux ont le même format, où il y a un entête de texte ASCII suivi d'un gros bloc binaire de données. J'utilise DataInputStream pour le faire. Pour les fichiers, j'utiliseLecture du texte et des données binaires d'un flux Java

DataInputStream dis = new DataInputStream(new FileInputStream(new File("test"))); 

Pour URL, j'utilise (où uc est initialisé pour pointer vers une URL):

DataInputStream dis = new DataInputStream(new BufferedInputStream(uc.getInputStream())); 

Après la mise en place du DataInputStream, je suis cela avec :

dis.readLine() 
dis.read(buf); 

Cela fonctionne, mais je remarque que readLine est depecrated (même si il y a des posts qui se réfèrent à l'utiliser). Est-il correct de continuer à l'utiliser puisque mon texte est ASCII? Si ce n'est pas une bonne idée, et je vais avec la recommandation du JDK d'utiliser BufferedReader, y at-il un moyen d'accéder à la fois au texte et binaire? J'ai essayé BufferedReader pour obtenir l'en-tête de texte, mais j'ai alors obtenu des données binaires incorrectes en utilisant le flux sous-jacent, probablement parce que certaines d'entre elles étaient déjà consommées.

+1

Quelle est la longueur des en-têtes de texte ASCII? Sont-ils de longueur fixe? Pourriez-vous lire l'en-tête en tant que "données binaires" et convertir en une ou plusieurs chaînes? –

+0

L'en-tête est de longueur variable, et j'ai besoin de chercher un délimiteur pour savoir où les données binaires commencent. Mais comme vous le dites, je pense que je peux lire le texte en binaire (en utilisant readByte) et construire une chaîne. Merci. – Ravi

Répondre

0

La raison pour laquelle il était déconseillé était de ne pas convertir correctement les octets en caractères. Puisque cet exemple est limité à ASCII, il n'y a aucun problème à l'utiliser.

Questions connexes