Tôi muốn mô phỏng luồng loại mạng trên một máy tính.Luồng có vị trí viết và đọc riêng biệt
Tôi đã thực hiện việc này bằng cách tạo một Stream
có hai luồng cơ bản, một để đọc và một luồng khác để ghi vào.
Sau đó, tôi tạo 2 trường hợp của lớp này trao đổi 2 luồng. Hiện tại tôi đang sử dụng MemoryStream
s làm 2 luồng cơ bản.
Vấn đề tôi có bây giờ là nếu tôi viết X byte thành MemoryStream
thì vị trí của nó sẽ là X và nếu sau đó tôi thực hiện Read
Tôi không nhận được dữ liệu, vì tôi đang ở cuối luồng.
Cho rằng tôi thường sẽ thực hiện một vài lần đọc/ghi (vì vậy không thể chỉ đặt lại vị trí thành 0 sau mỗi lần viết) số Stream
tôi có thể sử dụng để thực hiện hành vi này?
Có hiệu quả tôi muốn một loại hàng đợi byte mà tôi có thể viết và đọc dưới dạng luồng.
ví dụ: (bỏ qua đối số phương pháp thực tế)
MyStream.Write({ 1, 2, 3, 4, 5, 6 });
MyStream.Write({ 7, 8 });
MyStream.Read(3) // Returns { 1, 2, 3 }
MyStream.Read(4) // Returns { 4, 5, 6, 7 }
Chỉ vấn đề là mã này không phải là thread an toàn. Nếu bạn đang sử dụng mã này với nhiều luồng, bạn sẽ muốn đảm bảo không có gì cố gọi để đọc và ghi cùng một lúc. Trên phương thức Read và Write, bạn có thể thêm [MethodImpl (MethodImplOptions.Synchronized)] thành (thread) an toàn. – Qubei