亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

深入解析Java編程中面向字節流的一些應用

2019-11-26 14:56:52
字體:
來源:轉載
供稿:網友

文件輸入輸出流

文件輸入輸出流 FileInputStream 和 FileOutputStream 負責完成對本地磁盤文件的順序輸入輸出操作。

【例】通過程序創建一個文件,從鍵盤輸入字符,當遇到字符“#”時結束,在屏幕上顯示該文件的所有內容

import java.io.*;class ep10_5{  public static void main(String args[]){    char ch;    int data;    try{      FileInputStream a=new FileInputStream(FileDescriptor.in); //創建文件輸入流對象      FileOutputStream b=new FileOutputStream("ep10_5"); //創建文件輸出流對象      System.out.println("請輸入字符,以#號結束:");      while((ch=(char)a.read())!='#'){        b.write(ch);      }      a.close();      b.close();      System.out.println();      FileInputStream c=new FileInputStream("ep10_5");      FileOutputStream d=new FileOutputStream(FileDescriptor.out);      while(c.available()>0){        data=c.read();        d.write(data);      }      c.close();d.close();    }    catch(FileNotFoundException e){     System.out.println("找不到該文件!");    }    catch(IOException e){}  }}


FileDescriptor 是 java.io 中的一個類,該類不能實例化,其中包含三個靜態成員:in、out 和err,分別對應于標準輸入流、標準輸出流和標準錯誤流,利用它們可以在標準輸入輸出流上建立文件輸入輸出流,實現鍵盤輸入或屏幕輸出操作。

【例】實現對二進制圖形文件(.gif)的備份

import java.io.*;class ep10_6{  public static void main(String args[]) throws IOException{    FileInputStream a=new FileInputStream("ep10_6.gif");    FileOutputStream b=new FileOutputStream("ep10_6_a.gif");    System.out.println("文件的大小為:"+a.available());    byte c[]=new byte[a.available()];    a.read(c); //將圖形文件讀入數組    b.write(c); //將數組中的數據寫入到新文件中    System.out.println("文件已經被更名復制!");    a.close();    b.close();  }}

過濾流

FilterInputStream 和 FileOutputStream 是 InputStream 和 OutputStream 的直接子類,分別實現了在數據的讀、寫操作的同時能對所傳輸的數據做指定類型或格式的轉換,即可實現對二進制字節數據的理解和編碼轉換。

常用的兩個過濾流是數據輸入流 DataInputStream 和數據輸出流 DataOutputStream。其構造方法為:

  DataInputStream(InputStream in); //創建新輸入流,從指定的輸入流 in 讀數據  DataOutputStream(OutputStream out); //創建新輸出流,向指定的輸出流 out 寫數據

由于 DataInputStream 和 DataOutputStream 分別實現了 DataInput 和 DataOutput 兩個接口(這兩個接口規定了基本類型數據的輸入輸出方法)中定義的獨立于具體機器的帶格式的讀寫操作,從而實現了對不同類型數據的讀寫。由構造方法可以看出,輸入輸出流分別作為數據輸入輸出流的構造方法參數,即作為過濾流必須與相應的數據流相連。

DataInputStream 和 DataOutputStream 類提供了很多個針對不同類型數據的讀寫方法,具體內容讀者可參看 Java 的幫助文檔。

【例】將三個 int 型數字 100,0,-100 寫入數據文件 ep10_6.dat 中。

import java.io.*;class ep10_7{  public static void main(String args[]){    String fileName="ep10_7.dat";    int value1=100,value2=0,value3=-100;    try{      //將 DataOutputStream 與 FileOutputStream 連接輸出不同類型的數據      DataOutputStream a=new DataOutputStream(new FileOutputStream(fileName));      a.writeInt(value1);      a.writeInt(value2);      a.writeInt(value3);      a.close();    }    catch(IOException i){      System.out.println("出現錯誤!"+fileName);    }  }}

運行后在程序目錄中生成數據文件 ep10_7.dat,用文本編輯器打開后發現內容為二進制的:
00 00 00 64 00 00 00 00 FF FF FF 9C。

【例】讀取數據文件 ep10_6.dat 中的三個 int 型數字,求和并顯示。

import java.io.*;class ep10_8{  public static void main(String args[]){    String fileName="D://myjava/ep10_7.dat";    int sum=0;    try{      DataInputStream a=new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));      sum+=a.readInt();      sum+=a.readInt();      sum+=a.readInt();      System.out.println("三個數的和為:"+sum);      a.close();    }    catch(IOException e){      System.out.println("出現錯誤!"+fileName);    }  }}

運行結果:

三個數的和為:0

readInt 方法可以從輸入輸出流中讀入 4 個字節并將其作為 int 型數據直接參與運算。由于已經知道文件中有 3 個數據,所以可以使用 3 個讀入語句,但若只知道文件中是 int 型數據而不知道數據的個數時該怎么辦呢?因為 DataInputStream 的讀入操作如遇到文件結尾就會拋出 EOFException 異常,所以可將讀操作放入 try 中。

try{  while(true)  sum+=a.readInt();}catch(EOFException e){  System.out.pritnln("三個數的和為:"+sum);  a.close();}

EOFException 是 IOException 的子類,只有文件結束異常時才會被捕捉到,但如果沒有讀到文件結尾,在讀取過程中出現異常就屬于 IOException。

【例】從鍵盤輸入一個整數,求該數的各位數字之和。

import java.io.*;class ep10_9{  public static void main(String args[]) throws IOException{    DataInputStream a=new DataInputStream(System.in);    System.out.print("請輸入一個整數:");    int b=a.readInt();    int sum=0;    int c=b;    while(c>0){      int d=c%10; //取最低位      c=c/10; //去掉最低位      sum=sum+d; //累加各位之和    }    System.out.println(b+"的各位數字之和="+sum);  }}

運行結果:

請輸入一個整數:26842403082 的各位數字之和=31

需要注意的是,輸入的數據 26 為變成了 842403082,原因在于輸入數據不符合基本類型數據的格式,從鍵盤提供的數據是字符的字節碼表示方式,若輸入 26,只代表 2 和 6 兩個字符的字節數據,而不是代表整數 26 的字節碼。

若要從鍵盤得到整數需要先讀取字符串,再利用其他方法將字符串轉化為整數。
標準輸入輸出

System.in、System.out、System.err 這 3 個標準輸入輸流對象定義在 java.lang.System 包中,這 3 個對象在 Java 源程序編譯時會被自動加載。
標準輸入:標準輸入 System.in 是 BufferedInputStream 類的對象,當程序需要從鍵盤上讀入數據時,只需要調用 System.in 的 read()方法即可,該方法從鍵盤緩沖區讀入一個字節的二進制數據,返回以此字節為低位字節,高位字節為 0 的整型數據。
標準輸出:標準輸出 System.out 是打印輸出流 PrintStream 類的對象。PrintStream 類是過濾輸出流類 FilterOutputStream 的一個子類,其中定義了向屏幕輸出不同類型數據的方法print()和 println()。
標準錯誤輸出:System.err 用于為用戶顯示錯誤信息,也是由 PrintStream 類派生出來的錯誤流。Err 流的作用是使 print()和 println()將信息輸出到 err 流并顯示在屏幕上,以方便用戶使用和調試程序。

【例】輸入一串字符顯示出來,并顯示 System.in 和 System.out 所屬的類。

import java.io.*;class ep10_10{  public static void main(String args[]){    try{      byte a[]=new byte[128]; //設置輸入緩沖區      System.out.print("請輸入字符串:");      int count =System.in.read(a); //讀取標準輸入輸出流      System.out.println("輸入的是:");      for(int i=0;i<count;i++)        System.out.print(a[i]+""); //輸出數組元素的 ASCII 值      System.out.println();      for(int i=0;i<count-2;i++) //不顯示回車和換行符        System.out.print((char)a[i]+""); //按字符方式輸出元素      System.out.println();      System.out.println("輸入的字符個數為:"+count);      Class InClass=System.in.getClass();      Class OutClass=System.out.getClass();      System.out.println("in 所在的類為:"+InClass.toString());      System.out.println("out 所在的類為:"+OutClass.toString());    }    catch(IOException e){}  }}

運行結果如所示:

需要注意的是,輸入了 3 個字符按回車后,輸出的結果顯示為 5 個字符。這是由于 Java 中回車被當作兩個字符,一個是 ASCⅡ為 13 的回車符,一個是值為 10 的換行符。程序中 getClass()和 ToString()是 Object 類的方法,作用分別是返回當前對象所對應的類和返回當前對象的字符串表示。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品中文字幕在线观看| 国产成人午夜视频网址| 成人av番号网| 国产精品极品美女粉嫩高清在线| 亚洲精品国产综合区久久久久久久| 国产一区二区三区在线视频| 69av视频在线播放| 亚洲爱爱爱爱爱| 97色在线观看免费视频| 亚洲欧洲美洲在线综合| 色妞在线综合亚洲欧美| 久久久国产一区二区三区| 亚洲国产精品久久久| 精品欧美激情精品一区| 国产精品第2页| 一区三区二区视频| 欧美极品少妇xxxxⅹ免费视频| 高清一区二区三区日本久| 国产精品一二三视频| 精品高清一区二区三区| 亚洲永久在线观看| 91九色在线视频| 成人网在线观看| 亚洲国产天堂久久综合| 欧美日韩国产综合视频在线观看中文| 一本色道久久综合狠狠躁篇怎么玩| 亚洲美女www午夜| 成人免费网站在线观看| 青青久久av北条麻妃海外网| 欧美一级在线播放| 欧美日韩国产在线播放| 国产一区二区黑人欧美xxxx| 日韩在线小视频| 最新的欧美黄色| 97精品国产97久久久久久免费| 亚洲天堂一区二区三区| 久久久噜噜噜久久| 日韩精品在线免费观看| 欧美黑人巨大xxx极品| 成人国产精品日本在线| 久久天堂av综合合色| 国产成人亚洲综合| 亚洲国产黄色片| 久久国产精品久久久久久久久久| 18性欧美xxxⅹ性满足| 日本精品一区二区三区在线播放视频| 国产日韩在线亚洲字幕中文| 欧美国产精品va在线观看| 日本成人激情视频| 久久久久久久久国产精品| 久久精视频免费在线久久完整在线看| 欧美成在线观看| 欧美寡妇偷汉性猛交| 57pao国产成人免费| 国产成人精品视频在线观看| 国产成人综合一区二区三区| 日韩国产高清污视频在线观看| 亚洲色无码播放| 欧美高清一级大片| 国产精品黄页免费高清在线观看| 国产精品av电影| 国产精品福利在线| 亚洲午夜未删减在线观看| 高跟丝袜一区二区三区| 国产精品久久久久久久久久新婚| 日韩欧美一区二区三区| 亚洲欧美精品伊人久久| 久久精品国产一区二区三区| 亚洲成人精品av| 久久躁日日躁aaaaxxxx| 久久精品美女视频网站| 日本不卡高字幕在线2019| 国产在线日韩在线| 欧美性猛xxx| 精品国产欧美一区二区五十路| 精品中文字幕在线| 欧美性猛交xxxx| 亚洲人成77777在线观看网| 国产91九色视频| 欧美日韩激情视频8区| 奇米成人av国产一区二区三区| 欧美成人性色生活仑片| 欧美中文字幕在线播放| 日本人成精品视频在线| 色偷偷av一区二区三区乱| 国产亚洲精品久久久久久| 日韩中文第一页| 亚洲第一二三四五区| 国产精品免费视频xxxx| 久久久噜噜噜久久久| 亚洲精品成人网| 亚洲的天堂在线中文字幕| 久久久久久久一区二区三区| 久久久久久中文| 欧美精品一区三区| 欧美性猛交xxxx乱大交| 国产精品91免费在线| 九九久久久久99精品| 国模吧一区二区| 中文字幕在线看视频国产欧美| 久久久国产一区二区三区| 国产一区二区三区免费视频| 国产mv久久久| 亚洲成人激情小说| 国产精品永久免费在线| 久久综合伊人77777蜜臀| 久久香蕉国产线看观看网| 国产精品美女主播| 欧美一级高清免费| 亚洲国产精品999| 狠狠色狠狠色综合日日小说| 欧美激情亚洲一区| 亚洲免费av网址| 亚洲香蕉伊综合在人在线视看| 欧美午夜无遮挡| 日韩在线视频观看| 久久在精品线影院精品国产| 久久久精品国产亚洲| 国产免费一区二区三区在线观看| 亚洲女人天堂网| 国产热re99久久6国产精品| 性色av一区二区咪爱| 国产精品高潮呻吟久久av野狼| 国产精品丝袜久久久久久高清| 成人免费网站在线观看| 欧美国产日韩视频| 欧美视频一区二区三区…| 欧美第一黄色网| 国产精品久久久久久亚洲调教| 高清欧美一区二区三区| 欧美在线性爱视频| 高清欧美一区二区三区| 国产激情999| 在线精品91av| 久久精视频免费在线久久完整在线看| 日韩av在线播放资源| 国产精品自拍偷拍视频| 欧美一区二区大胆人体摄影专业网站| 欧美精品做受xxx性少妇| 久久综合电影一区| 精品国产一区二区三区久久狼黑人| 日韩一区av在线| 欧美精品在线观看| 97视频在线观看成人| 国产精品揄拍500视频| 国产日韩欧美日韩大片| 国产又爽又黄的激情精品视频| 91po在线观看91精品国产性色| 久久精品99国产精品酒店日本| 日韩av手机在线观看| 日韩高清电影免费观看完整版| 蜜臀久久99精品久久久无需会员| 成人精品一区二区三区电影免费| 日韩精品福利网站| 日本不卡高字幕在线2019| 亚洲欧美另类中文字幕| 亚洲男人天堂久| 国产精品电影观看| 日韩欧美在线网址| 亚洲国产欧美在线成人app| 91视频免费在线| 91视频8mav| 2019亚洲日韩新视频| 久热在线中文字幕色999舞|