Tại sao hàm read() trong Java trả về giá trị -1?

Discussion in 'Xây dựng các ứng dụng Java khác, các vấn đề khác' started by jojo trần, 10/1/17.

  1. jojo trần

    jojo trần New Member

    Chào mọi người,

    Em có 1 thắc mắc liên quan đến phương thức read ( ) của lớp DataInputStream. Cụ thể là như sau, theo docs về DataInputStream:

    https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html

    Theo đó, phương thức read ( ) (có kiểu là int) sẽ đọc dữ liệu và trả ra kết quả là mã ASCII của dữ liệu đọc được (0-255). Trong trường hợp file kết thúc (ký tự EOF) thì read ( ) sẽ trả về giá trị -1.

    Trong khi đó, ký tự EOF theo bảng mã ASCII có giá trị là 26. Vậy thì tại sao read ( ) lại trả về -1 thay vì 26 khi gặp End-Of-File (EOF)? Và ý nghĩa của giá trị -1 này là gì?

    Và còn 1 điều nữa, ký tự rỗng (NUL character) có mã ASCII là 0 (\0) được sử dụng để làm gì? Và, nếu 1 file rỗng (file trắng) thì nó có chứa ký tự NUL hay không?
  2. JackV

    JackV Administrator Staff Member

    Câu đó được hiểu chính xác là, nếu không có byte nào khả dụng vì luồng đọc đến cuối file thì trả về giá trị -1, hiểu là khi không còn giá trị để đọc nữa vì con trỏ file đã chạy đến cuối file thì trả về giá trị -1. Một ví dụ thực tế là nếu bạn bước đến cuối đường, đụng bức tường, không bước được nữa thì bạn la lên là hết đường chứ không thể la lên là bước lên tường ;))

    -1 là một dạng quy tắc biểu diễn cho các kết quả sai lệnh chung, không tìm thấy, index không phù hợp, ...

    Không có ký tự và có ký tự null là 2 trường hợp khác nhau, file trắng là file không chứa ký tự.

Chia sẻ trang này