最新回答 / 幕布斯7473508
他這個只是打印文件,而不是目錄。
if(file.isDirectory())//這個判斷的是是不是目錄,如果是就遞歸。把它下面的文件路徑打印出來。 你如果要打印目錄其實可以在遞歸前加上這段代碼:System.out.print(?file?); 他就會把目錄也打印下來。?
2019-11-04
最新回答 / jia_蛙
你不是已經得到了結果嗎? 使用Integer.toHexString就已經把字節轉換成了以16進制顯示的方式? 這里又使用?&0xff把前面24個沒用的0去掉,這就變成你控制臺輸出的那些了
2019-10-31
最贊回答 / iodysseus
你的補0判斷沒有問題,只不過是因為你的讀取文件中,包含了中文,而中文在字節數組中保存的數值是負值,?if(buf[i]<=0xf){? ? System.out.print("0");? ? }所以但凡是中文 都會經由此補上0,而且看你輸出的全是3位補0,應該是全文字內容,你再加入一點字母數字,就會發現有3位和兩位并存的現象
2019-10-30
最新回答 / SloMo8
00? 06 --->? 這兩字節表示的是字符串s占6個字節e4? b8? ad? e5? 9b? bd? --->"中國"的utf-8編碼4e? 2d? 56? fd? --->"中國"的utf-16be編碼
2019-10-21
我感覺java面向對象遵循的是宏觀因果律
序列化的時候調用所有父類的構造方法其實是因為Bar2 bar = new Bar2()這個實例化對象的操作造成的,可以在后面System.out.println("構造方法之后");可以看出來,因為要構造子類都得先構造父類
反序列化如果父親實現了序列化接口,對兒子進行序列化時其序列化代碼中就蘊含了父親的信息,也就知道了其父親的存在,但不知道他爺爺以及一直到老祖宗Object是否存在,因為他們沒有實現序列化接口,所以得依次創建這些祖先類的實例,也就是調用構造方法。但由于他父親已經存在于序列化信息中。所以就不用再構造一遍了。
為了保證反序列不是無中生有的
序列化的時候調用所有父類的構造方法其實是因為Bar2 bar = new Bar2()這個實例化對象的操作造成的,可以在后面System.out.println("構造方法之后");可以看出來,因為要構造子類都得先構造父類
反序列化如果父親實現了序列化接口,對兒子進行序列化時其序列化代碼中就蘊含了父親的信息,也就知道了其父親的存在,但不知道他爺爺以及一直到老祖宗Object是否存在,因為他們沒有實現序列化接口,所以得依次創建這些祖先類的實例,也就是調用構造方法。但由于他父親已經存在于序列化信息中。所以就不用再構造一遍了。
為了保證反序列不是無中生有的
2019-10-15
讀文件是硬盤往內存里不斷input,CPU在內存里不斷read
寫文件是CPU不斷往內存里write,內存不斷往硬盤里存儲output
所以把內存看成主體,輸入流是本來就存在于硬盤的數據不斷輸入到內存,我們read內存就能看到數據了,是一種輸入過程
輸出流得先write進內存,內存再輸出到硬盤進行存儲,是一種輸出過程也就是output
close()應該就是關閉內存
寫文件是CPU不斷往內存里write,內存不斷往硬盤里存儲output
所以把內存看成主體,輸入流是本來就存在于硬盤的數據不斷輸入到內存,我們read內存就能看到數據了,是一種輸入過程
輸出流得先write進內存,內存再輸出到硬盤進行存儲,是一種輸出過程也就是output
close()應該就是關閉內存
2019-10-13
字符流的底層也是字節流
所以在創建字符流對象時,也需要把字節流對象傳入
如:InputStreamReader in=new InputSteamReader(new FileInputStream());
所以在創建字符流對象時,也需要把字節流對象傳入
如:InputStreamReader in=new InputSteamReader(new FileInputStream());
2019-09-24
for循環適合已知次數的情況,即for只會讀到字節數組滿了就會停止。
while是一直讀到文件結尾才會停止,如果字節數組滿了,它會從頭覆蓋此數組進行讀取。
while是一直讀到文件結尾才會停止,如果字節數組滿了,它會從頭覆蓋此數組進行讀取。
2019-09-24