Comment voulez-vous fusionner les deux flux d'entrée en Java?
Avoir deux InputStreams en Java, est-il un moyen de les fusionner si vous vous retrouvez avec un InputStream qui vous donne la sortie des deux ruisseaux? Comment?
- Fusion de quelle manière exactement? Parfaitement continuer la lecture à partir d'un deuxième flux après la première a été lu à partir? Je ne suis pas très familier avec Java, mais en C# vous pouvez le faire assez facilement par l'implémentation d'une classe héritant de Flux contenant des références à la fois de la base de ruisseaux et puis en substituant la méthode de Lecture.
Vous devez vous connecter pour publier un commentaire.
Comme le faisait remarquer, il n'est pas clair ce que tu veux dire par fusion.
La prise d'entrée disponibles de façon "aléatoire" de l'un ou l'autre est compliquée par
InputStream.available
pas nécessairement de vous donner une réponse utile et le blocage du comportement des cours d'eau. Vous auriez besoin de deux fils à la lecture du flux, puis de passer à l'arrière de données viajava.io.Piped(In|Out)putStream
(bien que ces classes ont des problèmes). Sinon pour certains types de flux, il peut être possible d'utiliser une interface différente, par exemplejava.nio
non bloquant les canaux.Si vous souhaitez que le contenu complet du premier flux d'entrée suivie par la seconde:
new java.io.SequenceInputStream(s1, s2)
.java.io.SequenceInputStream
pourrait être ce dont vous avez besoin. Il accepte une énumération de cours d'eau, et affichera le contenu de la première ruisseau, puis le deuxième, et ainsi de suite jusqu'à ce que tous les flux sont vides.Vous pouvez écrire une coutume
InputStream
de mise en œuvre qui fait cela. Exemple:Ce code n'est pas testé, donc, votre kilométrage peut varier.
Pas ce que je peux penser. Vous seriez probablement avoir à lire le contenu des deux flux dans un byte [], puis de créer un ByteArrayInputStream de que.
Voici un MVar de mise en œuvre spécifiques à des tableaux d'octets (assurez-vous d'ajouter votre propre définition du package). À partir d'ici, c'est facile à écrire un flux d'entrée sur les flux fusionnés. Je peux poster que si demandé.