Datei binär einlesen

Hallo!

Für mein kleines Programm lese ich eine Datei auf folgende Weise binär in ein Byte-Array ein:

File.ReadAllBytes(datei)

Daneben wären mir noch folgende andere Arten eingefallen: Mit der BinaryReader-Klasse und über einen Stream. Gibt es noch andere Möglichkeiten?

Und jetzt meine eigentliche Frage dazu. Ich verwende diese eingelesene Datei dann um einen Hash zu berechnen. Welche von diesen Methoden ist die schnellste bzw. welche braucht am wenigsten Speicher. Oder ist das bei allen gleich?

mfg
chris

Hallo!
Klar, es gibt alle möglichen Wege, eine Datei in ein byte-Array einzulesen, und alle werden irgendwie in ihrem Speicherverbrauch und ihrer Geschwindigkeit variieren, aber sich ohne Not darüber großartig Gedanken zu machen, halte ich für überflüssig.
Bring’ das Programm erst mal mit einer der „Standardmethoden“ (also z.B. per File.ReadAllBytes oder BinaryReader) zum Laufen, optimieren kannst Du dann immer noch, falls Du z.B. feststellen solltest, dass es zu lange dauert. Die vorhandenen Klassen in der BCL sind schon optimiert und man sollte immer das KISS-Prinzip im Kopf halten:
Keep It Simple Stupid

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also man sollte sich bereits vor dem Programmieren Gedanken über die Effizienz seines Codes machen. So kann man ja den u.U. einen besseren Algorithmus wählen.
Zu deiner Frage:
File.ReadAllBytes:
Ist einfach zu verwenden, aber wenn du nur einen Hash berechnen willst nicht zu empfehlen. Denn es kann ja leicht sein, dass du von einer 500MB Datei den Hash berechnen willst. Und dann wirst du Probleme bekommen.
BinaryReader:
Ist eigentlich für etwas anderes gedacht.

Ich würde System.IO.FileStream verwenden und in einer Schleife immer einen Block von z.B. 4096 Bytes einlesen und dann den Hash updaten.

Hallo!

Zu deiner Frage:
File.ReadAllBytes:
Ist einfach zu verwenden, aber wenn du nur einen Hash
berechnen willst nicht zu empfehlen. Denn es kann ja leicht
sein, dass du von einer 500MB Datei den Hash berechnen willst.
Und dann wirst du Probleme bekommen.
BinaryReader:
Ist eigentlich für etwas anderes gedacht.

Ich würde System.IO.FileStream verwenden und in einer Schleife
immer einen Block von z.B. 4096 Bytes einlesen und dann den
Hash updaten.

Ich habe das Programm zuerst mit dem .NET Framework 2.0 entwickelt. Da ich jemandem aber eine Version für 1.1 erstellt habe, ergab sich ein Problem. File.ReadAllBytes gibt es erst seit 2.0. Daher habe ich das ganze auf FileStream umgebaut und kann es daher unter beiden Frameworks nutzen.

mfg
chris

P.S.: Ich brauch mich gar nicht um 4096 Bytes-Blöcke oder Änliches kümmern, da die Hashfunktion auch mit Streams arbeitet!