2012-11-07 21 views
2

我正在通過java.io.RandomAccessFile類的oracle API。說一個方法讀取一個字節的數據是什麼意思?

有方法叫做read()方法中,從傳遞給構造函數的文件中讀取數據的字節類: -

公衆詮釋閱讀() 拋出IOException異常

中讀取一個數據字節從這個文件。該字節返回爲 整數,範圍爲0到255(0x00-0x0ff)。如果還沒有 輸入可用,則此方法會阻止。

儘管RandomAccessFile不是InputStream的子類中,此 方法的行爲以完全相同的方式的InputStream的InputStream.read() 方法。

返回: 數據的下一個字節;如果已達到文件末尾,則返回-1。拋出: IOException - 如果發生I/O錯誤。如果已達到文件結尾,則不會拋出。

我很困惑,這是否表示它從傳遞給構造函數的文件讀取8位數據並將讀取的內容轉換爲int。

有什麼建議嗎?

+1

它從源讀取「八位字節的數據」(八位字節= 8位)..在這種情況下,數據將來自打開的文件,因爲它是一個RandomAccessFile實現..(返回類型是一個「int」只是所以它可以在EOF上返回'-1',否則它會是'[0,256)') – 2012-11-07 19:13:51

回答

5

究竟是什麼讓你感到困惑?

是的,它讀取一個字節的數據,它是8位,並返回它作爲整數值在包容性範圍0..255。所以,如果有問題的文件正好是一個文本文件,且第一個字符是一個大寫的「A」,read()將返回65

它返回一個int,而不是一個byte,以便它可以返回全方位0 .255作爲正數,並且仍然有-1作爲文件結尾的標記值(儘管可以認爲是一種例外情況會是更好的方法)。

+0

+1,我不確定字節在從文件讀取方面意味着什麼;但字節的大小是(8位),範圍-128到127 – Ankit

+1

是。在Java中,「byte」是從-128到127的有符號值。其他語言有一個範圍爲0到255的無符號版本。在英語中,「byte」是任何8位值,通常在內存或存儲;這種傳輸過程中的價值通常被稱爲「八位字節」。在真正的舊版(1980年以前,至少)論文中,您可以找到「字節」來指代機器的本地字大小,而不管它有多少位。 –

1

Java沒有無符號類型。通常解釋爲無符號時的字節是範圍[0..255]內的整數。 read()也使用-1來表示錯誤。所以你需要一個至少有257個不同值的類型。 Java int類型是一個32位有符號整數。因此,文檔說它傳遞了一個8位無符號的字節讀取值或一個錯誤指示符,並將它作爲容器傳遞給一個32位有符號的返回類型。

+1

短屁與詮釋腦放屁。固定。 – eh9

相關問題