Wenn ein BufferedInputStream sich immer vergewissern, dass die input nicht bereits gepuffert, einige doppelte Pufferung ernsthaft hart verursachen um Fehler zu finden. Auch müssen Sie Leser anders behandeln, das Konvertieren zu einem StreamReader und dem Puffern führt dazu, dass Bytes verloren gehen, wenn der Reader gepuffert ist. Auch wenn Sie einen Reader verwenden, denken Sie daran, dass Sie keine Bytes, sondern Zeichen in der Standardcodierung lesen (sofern keine explizite Codierung festgelegt wurde). Ein Beispiel für einen gepufferten Eingabestream, den Sie möglicherweise nicht kennen, ist URL URL; url.openStream();
Ich habe keine Referenzen für diese Informationen, es kommt aus dem Debugging-Code. Der Hauptfall, in dem das Problem für mich auftrat, war Code, der aus einer Datei in einen komprimierten Stream gelesen wurde. Wenn ich mich richtig erinnere, sobald Sie das Debuggen über den Code beginnen, gibt es Kommentare in der Java-Quelle, dass bestimmte Dinge nicht immer korrekt funktionieren. Ich erinnere mich nicht, woher die Informationen aus der Verwendung von BufferedReader und BufferedInputStream stammen, aber ich denke, das scheitert sofort am einfachsten Test. Denken Sie daran, dies zu testen, müssen Sie mehr als die Puffergröße markieren (was für BufferedReader versus BufferedInputStream unterscheidet), treten die Probleme auf, wenn die gelesenen Bytes das Ende des Puffers erreichen. Hinweis: Es gibt eine Puffergröße für den Quellcode, die sich von der im Konstruktor festgelegten Puffergröße unterscheiden kann. Es ist eine Weile her, dass ich dies getan habe, so dass meine Erinnerungen an Details ein wenig abweichen könnten. Das Testen wurde mit einem FilterReader/FilterInputStream durchgeführt, fügen Sie einen zum direkten Stream und einen zum gepufferten Stream hinzu, um den Unterschied zu sehen.
Siehe auch http://java.sun.com/javase/6/docs/api/java/io/InputStream.html#markSupported () – McDowell
funktioniert wie ein Charme, danke! – Epaga