色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>java源碼下載>

java 字節流轉字符流

大小:0.8 MB 人氣: 2017-09-27 需要積分:1

  一、字節流

  1)輸入和輸出流

  首先,字節流要進行讀和寫,也就是輸入和輸出,所以它有兩個抽象的父類InputStream、OutputStream。

  InputStream抽象了應用程序讀取數據的方式,即輸入流。

  OutputStream抽象了應用程序寫出數據的方式,即輸出流。

  2)讀寫結束

  在字節流中當讀寫結束,達到文件結尾時,稱為EOF = End或者讀到-1就讀到結尾。

  3)輸入流基本方法

  首先我們要清楚輸入流是什么。比如通過我們的鍵盤在文本文件上輸入內容,這個過程鍵盤充當的就是輸入流,而不是輸出流。因為鍵盤的功能是將內容輸入到系統,系統再寫入到文件上。以下是輸入流的基本方法read():

  intb = in.read(); //讀取一個字節無符號填充到int低八位。-1是EOF。in.read( byte[] buf); //讀取數據填充到字節數組buf中。返回的是讀到的字節個數。in.read( byte[] buf, intstart,intsize) //讀取數據到字節數組buf從buf的start位置開始存放size長度分數據

  其中in是InputStream抽象類的實例,可以發現這個方法和RandomAccessFile類中的read()方法差不多,因為兩者都是通過字節來讀取的。

  4)輸出流基本方法

  輸出流是進行寫的操作,其基本操作方法是write(),可以將此方法與輸入read()方法一 一去對應,更好理解。

  1out.write( intb) //寫出一個byte到流,b的低8位2out.write( byte[] buf) //將buf字節數組都寫到流3out.write( byte[] buf, intstart, intsize) //字節數組buf從start位置開始寫size長度的字節到流

  了解了InputStream、OutputStream的基本操作方法后,再來看看它們兩個的“孩子”FileInputStream和FileOutputStream。

  這兩個子類具體實現了在文件上讀取和寫入數據的操作,日程編程中更多的是使用這兩個類。

  二、FileInputStream和FileOutputStream類的使用

  —————–FileInputStream類的使用

  1.使用read()方法讀取文件

  /** * 讀取指定文件內容,按照16進制輸出到控制臺 * 并且每輸出10個byte換行 *@throwsFileNotFoundException */publicstaticvoidprintHex(String fileName)throwsIOException{ //把文件作為字節流進行讀操作FileInputStream in=newFileInputStream(fileName); intb; intcount= 0; //計數讀到的個數while((b=in.read())!=- 1){ if(b《= 0xf){ //單位數前面補0System.out.println( “0”); } System.out.print(Integer.toHexString(b& 0xff)+ “ ”); if(++count% 10== 0){ System.out.println(); } } in.close(); //一定要關閉流}

  運行結果(隨便一個文件來測試的):

  java 字節流轉字符流

  注意:

  - FileInputStream()構造函數可以通過文件名(String)也可以通過File對象。上面的案例是使用文件名來構造的。

  - (b=in.read())!=-1 通過讀到-1來判斷是否讀到文件結尾。

  - in.close() 使用完IO流的對象一定要關閉流,養成好習慣很重要。

  2.使用read(byte[] buf,int start, int size)方法讀取文件

  上述方法只能一個一個字節讀取,對于較大的文件效率太低,推薦使用這個方法來一次性讀取文件。

  publicstaticvoidprintHexByBytes(String fileName) throws IOException{ FileInputStream in=newFileInputStream(fileName); byte[] buf= newbyte[ 20* 1024]; //開辟一個20k大小的字節數組/* * 從in中批量讀取字節,放入到buf這個字節數組中 * 從第0個位置開始放,最多放buf.length個 * 返回的是讀到的字節個數 *///一次性讀完的情況intcount= in.read(buf, 0, buf.length); intj= 1; for( inti= 0;i《count;i++){ if((buf[i]& 0xff)《= 0xf){ //單位數前面補0System.out.print( “0”); } System. out.print(Integer.toHexString(buf[i]& 0xff)+ “ ”); if(j++% 10== 0){ System. out.println(); } } in.close(); } }

  read(byte[] buf,int start, int size)返回的是讀到的字節個數,即buf字節數組的有效長度,所以輸出buf數組時用的長度是count而不是buf.length,因為我們不知道文件大小和數組大小的關系,上述方法適用于文件大小不超過數組大小的情況下,一次性把文件內容讀取到數組里,這里就有一個問題了,如果文件大小超過數組大小,那又該如何讀取才能把文件全部讀完呢??

  我們知道讀到-1就是讀到文件末,所以還是利用while循環重復讀取直到讀到-1結束循環,把上述代碼修改后如下:

  publicstaticvoidprintHexByBytes(String fileName) throws IOException{ FileInputStream in=newFileInputStream(fileName); byte[] buf= newbyte[ 20* 1024]; //開辟一個20k大小的字節數組/* * 從in中批量讀取字節,放入到buf這個字節數組中 * 從第0個位置開始放,最多放buf.length個 * 返回的是讀到的字節個數 */intj= 1; //一個字節數組讀不完的情況,用while循環重復利用此數組直到讀到文件末=-1intb= 0; while((b= in.read(buf, 0, buf.length))!=- 1){for( inti= 0;i《b;i++){ if((buf[i]& 0xff)《= 0xf){ //單位數前面補0System. out.print( “0”); } System. out.print(Integer.toHexString(buf[i]& 0xff)+ “ ”); if(j++% 10== 0){ System.out.println(); } } } in.close(); } }

  好了,我們用一個大于數組的文件來測試一下結果(太長,只截圖末尾):

  java 字節流轉字符流

  大家可以比較兩者的不同,第二種優化后更適合日常的使用,因為無論文件大小我們都可以一次性直接讀完。

  —————–FileOutputStream類的使用

  FileOutputStream類和FileInputStream類的使用相類似,它實現了向文件中寫出btye數據的方法。里面的一些細節跟FileInputStream差不多的我就不提了,大家自己可以理解的。

  1.構造方法

  FileOutputStream類構造時根據不同的情況可以使用不同的方法構造,如:

  1//如果該文件不存在,則直接創建,如果存在,刪除后創建2FileOutputStream out=newFileOutputStream( “demo/new1.txt”); //以路徑名稱構造1//如果該文件不存在,則直接創建,如果存在,在文件后追加內容2FileOutputStream out= newFileOutputStream(“demo/new1.txt”, true);

  更多內容可以查詢API

  2.使用write()方法寫入文件

  write()方法和read()相似,只能操作一個字節,即只能寫入一個字節。例如:

  1out.wirte(‘A’) ;//寫出了‘A’的低八位2int a= 10;//wirte只能寫八位,那么寫一個int需要寫4次,每次八位3out.write(a》》》 24) ;4out.write(a》》》 16) ;5out.write(a》》》 8) ;6out.wirte(a) ;

  每次只寫一個字節,顯然是不效率的,OutputStream當然跟InputStream一樣可以直接對byte數組操作。

  3.使用write(byte[] buf,int start, int size)方法寫入文件

  意義:把byte[]數組從start位置到size位置結束長度的字節寫入到文件中。

  語法格式和read相同,不多說明

  三、FileInputStream和FileOutputStream結合案例

  了解了InputStream和OutputStream的使用方法,這次結合兩者來寫一個復制文件的方法。

  publicstaticvoidcopyFile(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){thrownewIllegalArgumentException( “文件:”+srcFile+ “不存在”); } if(!srcFile.isFile()){thrownewIllegalArgumentException(srcFile+ “不是一個文件”); } FileInputStream in=newFileInputStream(srcFile); FileOutputStream out= newFileOutputStream(destFile);byte[] buf= newbyte[ 8* 1024]; intb; while((b= in.read(buf, 0, buf.length))!=- 1){out.write(buf, 0, b); out.flush(); //最好加上} in.close(); out.close(); }

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 成人小视频免费在线观看| 亚洲精品无码AV中文字幕蜜桃| 鬼灭之刃花街篇免费樱花动漫| 免费中文字幕视频| 国产精品久久久久久久久久影院| 谁有成人网站地址| 久久精品AV麻豆| 亚洲精品动漫免费二区| 精品国产乱码久久久久久上海公司| av天堂电影网在线观看| 亚洲伊人色综合久久天天伊人| 琪琪的色原网站| 乱h好大噗嗤噗嗤烂了| 成人国产AV精品久久久久| 在线 日韩 欧美 国产 社区| 为什么丈夫插我我却喜欢被打着插| 国产偷啪自怕网| 俄罗斯破处| 北条麻妃夫の友人196| 午夜亚洲国产理论片二级港台二级| 精选国产AV精选一区二区三区| 中文字幕s级优女区| 亚洲爆乳无码精品AAA片蜜桃| 日日射夜夜干夜夜插在线播放| 国产视频精品免费| 达达兔午夜一级毛片| 一个人的免费完整在线观看HD| 午夜伦理:伦理片| 色情在线avav| 日本人吃奶玩奶虐乳| 欧美 日韩 无码 有码 在线 | 激情欧美日韩一区二区| 91精品国产色综合久久| 亚洲人成在线播放无码| 秋秋影视午夜福利高清| 男女作爱在线播放免费网页版观看| 久久99这里只有精品| 狠狠躁天天躁小说| 芳草地社区在线视频| 成人性生交大片| 国产成人在线视频免费观看|