2016-10-23 2 views
21

Warum erfordert std::io::copy, dass sowohl die Reader- als auch die Writer-Argumente als änderbare Referenzen übergeben werden müssen?Warum benötigt io :: copy den Leser und den Schreiber, um beide veränderbare Referenzen zu sein?

Ich kann verstehen, warum der Schriftsteller, um mutiert werden muss, Daten aufzunehmen, um es geschrieben wird, seinen internen Zustand zu verändern.

Doch warum muss ein Leser auch als änderbare Referenz gekennzeichnet werden? Wenn ich nur Daten lese, brauche ich dann nicht nur einen Verweis auf einen bestimmten Typ und keine veränderbare Referenz?

Antwort

29

Da Read Typen sind in der Regel One-Shot: durch von ihm zu lesen, Sie sind es mutiert.

Berücksichtigen Sie die Standardeingabe: Sie können nur einmal davon lesen, also etwas muss sich ändern. Wenn Sie von einem Socket lesen, mutieren Sie fast sicher einen internen Puffer, der verwendet wird, um die Unterschiede zwischen den Netzwerkpaketen zu berücksichtigen, die Sie erhalten, und wie viele Daten Sie zu einem bestimmten Zeitpunkt lesen möchten. Wie wäre es mit dem Lesen einer Chain, die verwendet wird, um lesbare Dinge zusammen zu verketten; ohne Mutation kann es nicht verfolgen, von welchem ​​es gelesen werden soll.

Sicher, es ist möglich einen Read Typen zu haben, die nicht veränderbaren Zugriff benötigt Lese auszuführen, aber das ist nicht universell wahr, und weil es nicht allgemein wahr ist, das Read Merkmal verlangt wandelbar Zugang.

+0

Das ist eigentlich eine genaue kristallklare Erklärung. Vielen Dank! –

+5

Selbst bei einer Datei aktualisieren Sie den aktuellen Lese-Offset. –

Verwandte Themen