Tại sao FileStream.Length là loại dài, nhưng đối số FileStream.Read - offset có độ dài thay thế ngắn hơn?Tại sao FileStream.Length là loại dài, nhưng đối số FileStream.Read - offset có độ dài ngắn hơn?
Bryan
Tại sao FileStream.Length là loại dài, nhưng đối số FileStream.Read - offset có độ dài thay thế ngắn hơn?Tại sao FileStream.Length là loại dài, nhưng đối số FileStream.Read - offset có độ dài ngắn hơn?
Bryan
Tham số offset
kể bắt đầu từ đâu ghi dữ liệu trong mảng của bạn, tham số array
. Nó không chỉ ra một bù đắp trong dữ liệu tập tin.
Các bù đắp tham số cho phép bù đắp của byte trong mảng (chỉ số đệm) mà tại đó để bắt đầu đọc, và đếm tham số cho biết số byte lớn nhất để được đọc từ dòng này . Giá trị trả lại là số byte thực tế được đọc hoặc bằng 0 nếu kết thúc luồng. Nếu hoạt động đọc thành công, vị trí hiện tại của luồng được nâng cao bằng số byte đã đọc. Nếu một ngoại lệ xảy ra, vị trí hiện tại của luồng không thay đổi.
Nguồn: FileStream.Read
Tôi giả sử bạn đang đề cập đến this phương pháp được ghi đè từ lớp cơ sở Stream
.
Giá trị bù trừ là vị trí trong đối số array
để đặt byte không được bù trừ từ đầu số FileStream
. Đối số array
thuộc loại byte[]
không thể có nhiều hơn int.MaxValue
yếu tố.
Giá trị bù là chỉ mục vào mảng byte nơi dữ liệu được đặt. Bạn không thể cấp phát một mảng lớn hơn 2 GB, do đó không cần số lớn hơn cho bù trừ.
Ngoài việc trả lời mike z, tại sao byte [] không thể được lập chỉ mục nhiều hơn int.MaxValue - lớp Array thực hiện IList với phương thức object this[int index] { get; set; }
, vì vậy chỉ mục có thể là số nguyên duy nhất.
FileStream.Length nhận được độ dài bằng byte của luồng và FileStream.Đọc đọc khối byte từ luồng. Vì vậy, về mặt logic, bạn sẽ có nhiều byte đơn hơn các khối byte đó. Tôi giả định rằng vì lý do này FileStream.Length yêu cầu loại dài.
Điều này được cho phép trong .NET 4.5 với cấu hình. http://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx – sisve
thực tế rất thú vị. Cám ơn. –
http://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx –