當前位置 : IT培訓網 > Java開發 > Java教程 > Java編程開發面向字節流的應用

Java編程開發面向字節流的應用

時間:2016-08-31 14:06:57??來源:Java培訓網??作者:IT培訓網??已有:名學員訪問該課程
FileDescriptor 是 java.io 中的一個類,該類不能實例化,其中包含三個靜態成員:in、out 和err,分別對應于標準輸入流、標準輸出流和標準錯誤流,利用它們可以在標準輸入輸出流上建立文件輸入輸出

關于Java方面的知識點已經介紹很多了,隨著社會的發展,很多人都希望可以借助Java實現高薪就業,那么選擇了Java就要用心學習了,否則也將難以就業,下面就是達內IT培訓網小編為大家總結的關于:“Java編程開發面向字節流的應用”方面的知識點,希望大家喜歡。

文件輸入輸出流

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

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

//********** ep10_5.java **********

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){}

    }

}

運行后在程序目錄建立一個名稱為 ep10_5 的文件,運行結果如圖 10-8 所示:

Java編程開發面向字節流的應用_www.straightshotcamera.com

圖 10-8  例 10_5 運行結果

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

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

//********** ep10_6.java **********

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();

    }

}

運行后在程序目錄備份了一個名稱為 ep10_6_a.gif 的文件,運行結果如圖 10-9 所示:

Java編程開發面向字節流的應用_www.straightshotcamera.com

圖 10-9  例 10_6 運行結果

過濾流

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

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

    DataInputStream(InputStream in);  //創建新輸入流,從指定的輸入流 in 讀數據

    DataOutputStream(OutputStream out);  //創建新輸出流,向指定的輸出流 out 寫數據

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

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

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

//********** ep10_7.java **********

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。

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

//********** ep10_8.java **********

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。

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

//********** ep10_9.java **********

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);

    }

}

運行結果:

請輸入一個整數:26

842403082 的各位數字之和=31

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

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

標準輸入輸出

System.in、System.out、System.err 這 3 個標準輸入輸流對象定義在 java.lang.System 包中,這 3 個對象在 Java 源程序編譯時會被自動加載。

1.      標準輸入:標準輸入 System.in 是 BufferedInputStream 類的對象,當程序需要從鍵盤上讀入數據時,只需要調用 System.in 的 read()方法即可,該方法從鍵盤緩沖區讀入一個字節的二進制數據,返回以此字節為低位字節,高位字節為 0 的整型數據。

2.      標準輸出:標準輸出 System.out 是打印輸出流 PrintStream 類的對象。PrintStream 類是過濾輸出流類 FilterOutputStream 的一個子類,其中定義了向屏幕輸出不同類型數據的方法print()和 println()。

3.      標準錯誤輸出:System.err 用于為用戶顯示錯誤信息,也是由 PrintStream 類派生出來的錯誤流。Err 流的作用是使 print()和 println()將信息輸出到 err 流并顯示在屏幕上,以方便用戶使用和調試程序。

【例 10-10】輸入一串字符顯示出來,并顯示 System.in 和 System.out 所屬的類//********** ep10_10.java **********

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){}

    }

}

運行結果如圖 10-10 所示:

Java編程開發面向字節流的應用_www.straightshotcamera.com

圖 10-10  例 10_10 運行結果

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

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
------分隔線----------------------------
Java教程
1、Java 概述
1.1 Java語言概述
1.2 Java虛擬機以及跨平臺原理
1.3 Java的主要就業方向
1.4 Java的不同版本
1.5 Java開發環境搭建
1.6 第一個Java程序示例
1.7 Java類和對象的概念
1.8 Java類庫及其組織結構
1.9 Java import
2、Java 語法基礎
2.1 Java數據類型以及變量的定義
2.2 Java數據類型轉換
2.3 Java運算符
2.4 Java流程控制
2.5 Java數組的定義和使用
2.6 Java字符串(String)
2.7 Java StringBuffer與StringBuider
2.8 強調一下編程風格
3、Java 類與對象
3.1 Java類的定義及其實例化
3.2 Java訪問修飾符
3.3 Java變量的作用域
3.4 Java this關鍵字詳解
3.5 Java方法重載
3.6 Java類的基本運行順序
3.7 Java包裝類、拆箱和裝箱詳解
3.8 再談Java包
3.9 源文件的聲明規則
4、Java 繼承和多態
4.1 繼承的概念與實現
4.2 Java super關鍵字
4.3 繼承中的方法的覆蓋和重載
4.4 多態和動態綁定
4.5 instanceof 運算符
4.6 多態對象的類型轉換
4.7 Java static關鍵字
4.8 Java final關鍵字
4.9 Java Object類
5、面向對象高級特性
5.1 Java內部類及其實例化
5.2 內部類的分類
5.3 抽象類的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象類的區別
5.6 Java 泛型
5.7 泛型通配符和類型參數的范圍
6、異常處理
6.1 異常處理基礎
6.2 異常類型Java語言中常見的異常類型有哪些
6.3 未被捕獲的異常
6.4 try和catch的使用
6.5 多重catch語句的使用
6.6 try語句的嵌套
6.7 throw:異常的拋出
6.8 throws子句
6.9 finally塊
6.10 Java的內置異常
6.11 創建自己的異常子類
6.12 斷言
7、線程編程
7.1 線程的概念
7.2 Java線程模型
7.3 主線程
7.4 創建線程
7.5 創建多線程
7.6 isAlive()和join()的使用
7.7 線程優先級
7.8 線程同步
7.9 線程間通信
7.10 線程死鎖
7.11 線程的掛起、恢復和終止
8、輸入輸出(IO)操作
8.1 輸入輸出基本概念
8.2 面向字符的輸入流
8.3 面向字符的輸出流
8.4 面向字節的輸入輸出流
8.5 面向字節流的應用
8.6 文件與目錄管理
8.7 文件的隨機讀寫
8.8 文件的壓縮處理
9、常用類庫、向量與哈希
9.1 Java基礎類庫
9.2 Object類
9.3 Java語言包(java.lang)簡介
9.4 日期和時間類
9.5 向量及其應用
9.6 哈希表及其應用
10、圖形界面(GUI)設計
10.1 圖形界面設計基礎
10.2 框架窗口
10.3 標簽、按鈕和按鈕事件
10.4 面板
10.5 布局設計
10.6 文本框和文本區
10.7 文本框和文本區的輸入輸出
10.8 選擇框和單選按鈕
10.9 列表和組合框
10.10 菜單
10.11 對話框
10.12 滾動條
10.13 鼠標事件
10.14 鍵盤事件
11、圖形、圖像與多媒體
11.1 繪圖基礎
11.2 設置字型和顏色
11.3 繪圖模式
11.4 Graphics類的繪圖方法
11.5 Graphics2D類的繪圖方法
11.6 圖像處理基礎
11.7 圖像緩沖技術
11.8 多媒體基礎
12、網絡與數據庫編程
12.1 IP地址和InetAddress類
12.2 統一資源定位符
12.3 套接字(Socket)
12.4 數據庫連接
12.5 幾個重要的類和接口
12.6 數據庫查詢
12.7 數據庫更新
12.8 插入記錄
12.9 修改記錄
12.10 刪除記錄
激情色播