Tôi cảm thấy dữ liệu nhị phân không có những thứ như cuối dòng.
Tệp nhị phân có thể có bất kỳ ký tự nào có thể có trong đó, kể cả ký tự \ n. Bạn không muốn python ngầm chuyển đổi bất kỳ ký tự nào trong một tệp nhị phân sang một tệp khác. Python không có ý tưởng nó đang đọc một tập tin nhị phân, trừ khi bạn nói với nó như vậy. Và khi python đọc một tệp văn bản, nó sẽ tự động chuyển đổi bất kỳ ký tự \ n nào thành ký tự dòng mới của hệ điều hành, mà trên Windows là \ r \ n.
Đó là cách mọi thứ hoạt động trong tất cả các ngôn ngữ lập trình máy tính.
Một cách khác để suy nghĩ về nó là: một tệp chỉ là một chuỗi dài các byte (8 bit). Một byte chỉ là một số nguyên. Và một byte có thể là bất kỳ số nguyên nào. Nếu một byte xảy ra là số nguyên 10, đó cũng là mã ascii cho ký tự \ n. Nếu các byte trong tệp đại diện cho dữ liệu nhị phân, bạn không muốn Python đọc trong 10 và chuyển đổi nó thành hai byte: 13 và 10. Thông thường khi bạn đọc dữ liệu nhị phân, bạn muốn đọc, nói, 2 byte đầu tiên đại diện cho một số, sau đó 4 byte tiếp theo đại diện cho một số khác, vv. Rõ ràng, nếu python đột nhiên chuyển đổi một byte thành hai byte, điều đó sẽ gây ra hai vấn đề: 1) Nó làm thay đổi dữ liệu, 2) Tất cả các ranh giới dữ liệu của bạn sẽ bị rối tung lên.
Ví dụ: giả sử byte đầu tiên của tệp được giả định đại diện cho trọng lượng của chó và giá trị của byte là 10. Sau đó byte tiếp theo được giả định đại diện cho tuổi của chó và giá trị của nó là 1. Nếu Python chuyển đổi 10, đó là mã ascii cho \ n, để hai byte: 10 và 13, sau đó tay dữ liệu python bạn sẽ trông giống như:
và khi bạn trích xuất các byte thứ hai cho tuổi của chó, bạn nhận được 13 - không 1.
Chúng tôi thường nói một tệp có chứa 'ký tự' nhưng điều đó là sai. Máy tính không thể lưu trữ các ký tự; họ chỉ có thể lưu trữ số. Vì vậy, một tập tin chỉ là một chuỗi dài các số. Nếu bạn nói với python để xử lý những con số như mã ascii, đại diện cho các ký tự, sau đó python sẽ cung cấp cho bạn văn bản.
Nó đọc "Hãy rất cẩn thận ** để ** sử dụng chế độ nhị phân ...", không phải "Hãy rất cẩn thận ** khi bạn ** sử dụng chế độ nhị phân ...". Chế độ nhị phân là an toàn. – Matthias