Die .NET BinaryReader/BinaryWriter
Klassen können unter Angabe eines Encoding
für String
-bezogene Operationen erstellt werden.Get Encoding von BinaryReader/Writer?
Ich habe benutzerdefinierte String-Formate mit Erweiterungsmethoden implementiert, würde sie aber dennoch so implementieren, dass sie die Encoding
, die beim Instanziieren des BinaryReader/Writer
angegeben wurde, respektieren.
Es scheint keine Möglichkeit zu geben, die Codierung vom Leser/Schreiber abzurufen, nicht einmal beim Erben von ihrer Klasse. Ich konnte nur von ihnen erben, um die übergebene Codierung abzufangen, indem sie alle ihre Konstruktoren neu erstellte. Ich schaute in die .NET source code, und es wird nur verwendet, um eine Decoder-Klasse (im Falle der BinaryReader
) zu instanziieren, aber ich kann auch nicht darauf zugreifen.
Verliere ich zu einem Mangel in diesen Klassen hier? Kann ich mit Reflexion in sie hacken?
OK, Sie haben Recht. Die WriteString-Methode scheint dies jedoch explizit zu ignorieren (laut MSDN). –
Wenn das Unterklassieren und Abfangen der Kodierung in den Konstruktoren in Ihrem Szenario auch nur entfernt möglich ist, würde ich es vor potenziell instabilen Reflexions-Hacks bevorzugen.(Was ich nicht sicher bin, ist sogar möglich, da ich keine Codierungsreferenz in der Decoder-Klasse sah.) – nodots
Können Sie erklären, warum Ihre Erweiterungsmethoden auf dem BinaryReader/BinaryWriter selbst funktionieren müssen? Die ReadString/WriteString-Methoden sollten die Kodierung übersetzen. Wenn also Ihre Erweiterungsmethoden die Strings verwenden, die bei diesen Methoden ein- und ausgehen, scheint es mir, als müssten Sie sich keine Gedanken darüber machen? –