6
votes

Taille tampon inconnue à lire à partir d'un DataGutant dans Java

J'ai la déclaration suivante:

DataGuTStream est = Nouveau DataGuTretstream (process.getInputStream ());

J'aimerais imprimer le contenu de ce flux d'entrée, mais je ne connais pas la taille de ce flux. Comment dois-je lire ce flux et l'imprimer?


1 commentaires

Si vous utilisez uniquement un tampon, l'utilisation d'un DataGuThetStream n'ajout d'aucune valeur.


4 Réponses :


2
votes

appeler est.Read (octet []) réparez-le, passant un tampon pré-alloué (vous pouvez continuer à réutiliser le même tampon). La fonction renvoie le nombre d'octets réellement lus, ou -1 à la fin du flux (auquel cas, arrêtez): xxx


0 commentaires

1
votes
byte[] buffer = new byte[100];
int numberRead = 0;
do{
   numberRead = is.read(buffer);
   if (numberRead != -1){
      // do work here
   }
}while (numberRead == buffer.length);
Keep reading a set buffer size in a loop. If the return value is ever less than the size of the buffer you know you have reached the end of the stream. If the return value is -1, there is no data in the buffer.DataInputStream.read

0 commentaires

-1
votes

DataGuTretstream code> est quelque chose d'obsolète. Je vous recommande d'utiliser scanner code> à la place.

Scanner sc = new Scanner (process.getInputStream());
while (sc.hasNextXxx()) {
   System.out.println(sc.nextXxx());
}


1 commentaires

Pas sûr que DatainPhatStream est obsolète, mais il est redondant ici.



8
votes

Il est commun à tous les flux, que la longueur n'est pas connue à l'avance. Utilisation d'une standard InputStream La solution habituelle consiste simplement à appeler lis jusqu'à ce que -1 est renvoyé.

Mais je suppose que vous avez enveloppé une standard InputStream avec un datagnutstream pour une bonne raison: pour analyser Data binaires . (Remarque: Scanner est uniquement destiné aux données textuelles.)

Le Javadoc pour DataUnputStream vous montre que cette classe a deux manières différentes d'indiquer EOF - chaque méthode renvoie -1 ou jette un eofexception . Une règle de base est la suivante:

  • Chaque méthode héritée à partir de introuvable utilise la convention "renvoyer -1 " ",
  • Chaque méthode non héritée de introuvable jette le eofexception .

    Si vous utilisez lishorthort par exemple, lisez jusqu'à ce qu'une exception soit lancée, si vous utilisez "Lire ()", faites-le jusqu'à ce que -1 est renvoyé.

    Conseil: Soyez très Attention au début et recherchez chaque méthode que vous utilisez à partir de DataGuTretstream - une règle de base peut casser.


3 commentaires

+1 the Tutoriel élabore, "Notez que Datastreams détecte une condition de fin de fichier en attrapant eofException , au lieu de tester une valeur de retour invalide ".


Je pensais que j'ai fait la distinction entre Dis et est claire. Mais j'ai édité la réponse en fonction de votre contribution. Tnx


AHA, méthodes implémentant Datainput , qui sont pas héritées de introuvable , lancez eofexception . Merci de clarifier.