第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

誰來幫忙看一下我的關(guān)于JavaIO字節(jié)流的問題

誰來幫忙看一下我的關(guān)于JavaIO字節(jié)流的問題

aiguo94 2016-04-07 20:38:08
package?lianxi; import?java.io.FileInputStream; import?java.io.IOException; public?class?IOUtil?{ /** ?*?讀取指定文件內(nèi)容,按照16進(jìn)制輸出到控制臺 ?*?并且每輸出十個byte換行 ?*?@param?fileName ?*/ public?static?void?printHex(String?fileName)?throws?IOException{ //把文件作為字節(jié)流進(jìn)行讀操作 FileInputStream?in=new?FileInputStream(fileName); int?b; int?i=1; while((b=in.read())!=-1){ if(b<=0xf){ //單?位數(shù)前面補(bǔ)0 System.out.print("0"); } System.out.print(Integer.toHexString(b)+"??");//將整型b轉(zhuǎn)換為16進(jìn)制表示的字符串 if(i++%10==0){ System.out.println(); } } in.close(); } public?static?void?printHexByByteArray(String?fileName)?throws?IOException{ FileInputStream?in=new?FileInputStream(fileName); byte[]?buf=new?byte[20*1024]; /** ?*?從in中批量讀取字節(jié),放入到buf這個字節(jié)數(shù)組中,從第0個位置開始放, ?*?最多放buf.length個。返回的是讀到的字節(jié)的個數(shù) ?*/ int?bytes=in.read(buf,0,buf.length);//一次性讀完,說明這個字節(jié)數(shù)組足夠大 int?j=1; for(int?i=0;i<bytes;i++){ if(buf[i]<=0xf){ System.out.print("0"); } System.out.print(Integer.toHexString(buf[i])+"??"); if(j++%10==0){ System.out.println(); } } in.close(); } }------》這個是IOUtil類package?lianxi; import?java.io.IOException; public?class?IOUtilTest1?{ public?static?void?main(String[]?args)?{ try?{ IOUtil.printHex("e:\\wordstudy\\hello.txt"); }?catch?(IOException?e)?{ e.printStackTrace(); } } }-----》這個是IOUtilTest1類,是測試IOUtil類的第一個方法的測試類package?lianxi; import?java.io.IOException; public?class?IOUtilTest2?{ public?static?void?main(String[]?args)?{ try?{ IOUtil.printHexByByteArray("e:\\wordstudy\\hello.txt"); }?catch?(IOException?e)?{ e.printStackTrace(); } } }----》這個是IOUtilTest2類,是測試IOUtil類的第二個方法的測試類第一個測試類能成功運(yùn)行,第二個測試類就不行了,不知道哪里出問題了,求教大神解答。先謝謝了
查看完整描述

1 回答

已采納
?
特南克斯

TA貢獻(xiàn)14條經(jīng)驗(yàn) 獲得超9個贊

問題其實(shí)很簡單,你的第二個測試類的錯誤是因?yàn)槟慊A(chǔ)不好,只不過是有兩個毛病,我給你解釋一下。

第一個:

System.out.print(Integer.toHexString(b)+"??");//將整型b轉(zhuǎn)換為16進(jìn)制表示的字符串

這里的toHexString方法是吧整數(shù)轉(zhuǎn)換成十六進(jìn)制的String,在你的第一個方法中,你read方法將文件中的一個數(shù)據(jù)字節(jié)讀取成Int返回,一個字節(jié)8位,一個int32位,在轉(zhuǎn)換成16進(jìn)制的string輸出的是2位的16進(jìn)制。

在你的第二個方法中,

System.out.print(Integer.toHexString(buf[i])+"??");

這里的buf[i]是字節(jié)8位,8為轉(zhuǎn)換為int32位,轉(zhuǎn)換為hexString是8位的16進(jìn)制,所以你看起來是輸出錯誤了,下面是錯誤的解決方法:

System.out.print(Integer.toHexString(buf[i]&0x000000ff)?+"??");

加上一個位運(yùn)算,把高位數(shù)據(jù)擦除就可以了。

第二個:

byte緩沖區(qū)不要太大,打印那么多零,你不難受?但是也別太小了,加上一個while循環(huán),循環(huán)讀取會好一點(diǎn)

查看完整回答
反對 回復(fù) 2016-04-15
  • aiguo94
    aiguo94
    謝謝你的幫助。 其實(shí)我更想問的問題是我的代碼是跟著老師打的,javaIO視頻里的老師就是這么敲的,為什么我的兩個方法結(jié)果是不一樣的,老師的結(jié)果是一樣的。難道是因?yàn)樽x取的文件類型的問題。 我基礎(chǔ)是真的很不好,一個人自學(xué),實(shí)在是太難了。
  • 特南克斯
    特南克斯
    你是對著老師的視頻代碼完全一樣敲的嗎?那我就不知道了。你兩個方法輸出的結(jié)果其實(shí)是一樣的。只不過一個是一個字節(jié)8位,一個是4個字節(jié)32位,而這個32位的數(shù)高位補(bǔ)的是1。如果你對我上面說的不是太明白的話,你應(yīng)該去了解一下什么是原碼,補(bǔ)碼,反碼和計(jì)算機(jī)二進(jìn)制的知識
  • aiguo94
    aiguo94
    恩恩,謝謝你
  • 1 回答
  • 0 關(guān)注
  • 1486 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號