Jako discussed before, gdy BinaryReader lub BinaryWriter zostanie zamknięty, jego Strumień bazowy również zostanie zamknięty (aargh). Rozważmy tę sytuację: procedura R
jest przekazywana do obiektu MemoryStream, na przykład M
; Chciałbym napisać kilka rzeczy do M
, a następnie przekazać je do innej procedury w celu dalszego przetwarzania (niekoniecznie w formie pisemnej). Dla wygody chciałbym zawinąć M
w BinaryWriter, aby zrobić moje pisanie. Po napisaniu, skończyłem z BinaryWriter, ale nie z M
.Jak mogę "rozwidlić" strumień w .NET?
void R(MemoryStream M)
{
using (B = new BinaryWriter(M))
{
// write some stuff using B
}
S(M); // now pass M to another routine for further processing
}
Ale nie mogę wyrzucać BinaryStream bez zamykania M
.
P: Czy można wykonać jedną z poniższych czynności?
- wyodrębnić podstawowe bajt [] Z MemoryStream,
- klon Strumień
- ponownie otworzyć strumień po jego zamknięciu
Nie wiem, C#, ale w Javie po prostu po prostu porzucić bez zamykania BinaryWriter. Czy użycie siły konstrukcyjnej {...} nie jest zamykane? Więc nie używaj tego konstruktu! –
P.S. Ale musisz upewnić się, że opróżniasz BinaryWriter zanim go porzucisz. –