FileInputStream in=new FileInputStream("F:/Test.txt");
FileOutputStream out=new FileOutputStream("G:/Test.txt");
int b;
while((b=in.read())!=-1){
out.write(b);
System.out.println(b);
}
in.close();
out.close();
以上代碼輸出
206
210
202
199
186
195
200
203
b不應該是每次讀取到的byte個數且為1嗎?
對於這段代碼中out.write(b)如何理解?說明文檔中解釋的是將指定字節寫入此文件輸出流,
為何b會輸出上述數值?
首先,InputStream和OutputStream是基於字節的文件操作類,寫入和讀取的都是一個字節的數據。
其次,write操作是寫入一個字節的數據,這個數據就是你給的那個int類型的值,它最後以字節為單位,本質就是8個01串寫入文件中。
因為文件的本質就是01二進制串,只不過不同的文本編輯器以不同的編碼方式解碼後呈現給我們的才是可閱讀的文本。
你的問題中,write(b)就是將b這個int類型的數值轉換成二進制數據寫入文件中的,read操作就是每次讀取一個字節的01二進制串,然後將其轉換為0到255范圍內的int類型返回,也就是write寫入的那個數。
read的api是這樣的:
Reads a byte of data from this file. The byte is returned as an integer in the range 0 to 255 ({@code 0x00-0x0ff}).