Exception indiquant “ Réinitialisation des invalides de la marque ” vient en marquant un inputStream et de le réinitialiser, pour les Gros fichiers.?

Je suis à l'aide de InputStream objet pour calculer le Md5 d'un fichier.
Je marque le flux
Plus tard, j'ai réinitialiser le flux. Cependant pour les gros fichiers suivants exception...

inStreamLatestFile.mark(0);
checkSumCalculated = MD5CheckSumCalculator.calculateMD5CheckSum(inStreamLatestFile);
inStreamLatestFile.reset();

L'exception

.Md5ValidationAggrStrat ||**Error in calculating checksum:: java.io.IOException: Resetting to invalid mark**
                        ||java.io.IOException: Resetting to invalid mark
                        ||at java.io.BufferedInputStream.reset(BufferedInputStream.java:437)
                        ||at com.amadeus.apt.ib.modules.func.map.camel.strategy.Md5ValidationAggrStrategy.aggregate(Md5ValidationAggrStrategy.java:81)
                        ||at org.apache.camel.processor.aggregate.AggregateProcessor.onAggregation(AggregateProcessor.java:365)
                        ||at org.apache.camel.processor.aggregate.AggregateProcessor.doAggregation(AggregateProcessor.java:245)
                        ||at org.apache.camel.processor.aggregate.AggregateProcessor.process(AggregateProcessor.java:201)
                        ||at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
                        ||at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)

J'ai essayé de clôture, les flux et la réouverture de cette façon.. juste pour obtenir quelques exceptions près comme suit::

 try {
        inStreamLatestFile= ExchangeHelper.getMandatoryInBody(
                  oldExchange, InputStream.class);

        //inStreamLatestFile.mark(0);
        checkSumCalculated = MD5CheckSumCalculator.calculateMD5CheckSum(inStreamLatestFile);

        //closing the inputStream of the latest file
        if(inStreamLatestFile != null){
            try {
                inStreamLatestFile.close();
            } catch (IOException e) {
                logger.error("Error occurred in closing the stream :: "+ e.getMessage());
            }
        }


        tempInputStream= ExchangeHelper.getMandatoryInBody(
                  oldExchange, InputStream.class);
        oldExchange.getIn().setBody(tempInputStream);

Toutefois l'exception suivante vient quand j'essaie de resuse nouvellement récupéré InputStream.

 caught: java.io.IOException: Stream closed: java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
Est-il possible de la calculateMD5CheckSum marque le flux?
Merci beaucoup pour résoudre le problème.. Non, c'est un tiers de l'Api et je n'ai aucun contrôle sur elle. Cette méthode ne modifie que le inputStream et donc j'ai besoin de marquer et de réinitialiser le flux de données, comme j'ai besoin d'elle plus tard...
C'est peut-être que getMandatoryInBody renvoie la même instance de flux de données à chaque fois. Je ne sais pas qui de l'API.
Oui, cela pourrait être un problème.{Je suis en train de travailler sur apache camel cadre} Donc, fondamentalement, il se résume à cette question, Comment faire pour créer un double de inputStream tels que les objets sont des instances différentes.. ??
Vous pouvez lire l'original InputStream dans un ByteArrayOutputStream. Copiez le bytes dans ce flux dans une nouvelle ByteArrayInputStream. Pass pour le MD5 de la calculatrice. La création d'une nouvelle ByteArrayInputStream à nouveau avec le même octets et le passer à tout autre chose dont vous avez besoin.

OriginalL'auteur Kumar Ritesh | 2013-09-02