最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

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

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

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

1 回答

已采納
?
特南克斯

TA貢獻14條經驗 獲得超9個贊

問題其實很簡單,你的第二個測試類的錯誤是因為你基礎不好,只不過是有兩個毛病,我給你解釋一下。

第一個:

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

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

在你的第二個方法中,

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

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

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

加上一個位運算,把高位數據擦除就可以了。

第二個:

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

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號