2009-12-15 3 views
2
DataInputStream in; 

byte[] b = new byte[1024]; 
for (;;){ 
in.read(b); 
//do something 
} 

J'ai le code ci-dessus. Dans un autre thread, je gère d'autres événements. Dans ce fil je veux annuler l'opération de lecture montrée dans le code ci-dessus. Comment puis-je faire?annuler opération de lecture

Répondre

1

si vous envoyez un autre thread des données

final byte[] TERMINATOR = ...; 
in.Write(TERMINATOR) 

Le fil de lecture pourrait dans ce cas, ne doit pas utiliser une boucle, mais il faut vérifier pour la séquence « Terminator ».

0

Vous pouvez fermer la InputStream vous lisez, ou vous pouvez retravailler votre code pour lire uniquement les données quand il y a effectivement des données à lisez-ce qui pourrait être presque impossible quand vous ne contrôlez pas le côté écriture.

1

Vous devez utiliser java.nio pour lire à partir de votre flux, à quel point vous pouvez appeler thread.interrupt() de l'autre thread pour interrompre read en cours.

0

Vous pouvez réinitialiser le flux d'entrée si vous le souhaitez:

DataInputStream in; 

byte[] b = new byte[1024]; 
in.mark(b.length()); 
try { 
for (;;){ 
in.read(b); 
//do something 
} 
} 
catch (InterruptedException e) { 
in.reset(); 
} 
+0

Je pense que vous avez manqué le point - le vrai problème est de savoir comment provoquer le 'InterruptedException' en premier lieu, et même alors, il n'interromprait probablement pas un' read() 'qui est bloqué dans le système d'exploitation . – Alnitak

0

Peut-être que j'ai mal compris quelque chose, mais je pense que vous voulez utiliser modèle d'observation.

Questions connexes