概述
單純使用檔案輸入流與輸出流不是太方便,需要將基本類型數據轉換成位元組才能夠進行數據的讀寫,況且讀出來的數據都是位元組形式,因此這兩個類一般用於大量數據的讀寫,使用場所不是太廣,故而我們還需另外幾個類。能夠進行基本類型數據讀寫的類就是數據輸入與輸出流(DataInputStream與DataOutputStream),其中Datalnput-Stream類是過濾輸入流的子類,而DataoutputStream類是FiherOutputStream類的子類,過濾輸出流與過濾輸入流的類與檔案輸入流以及檔案輸出流類似,區別就是這兩個類的構造方法與檔案流不同,它們的參數為輸入流或輸出流,也就是說過濾流是建立在其他輸入與輸出流的基礎之上,而過濾流的方法與檔案輸入與輸出流類似。
數據輸出流(Data Output Stream)是過濾輸出流的子類,它不僅提供了過濾輸出流的所有方法,而且還提供自己的新方法,來進行基本類型的寫人工作。需要注意的是數據輸出流雖然能夠進行基本類型寫入工作,但是該流仍然是位元組流,寫出去的檔案仍然是以位元組形式出現的。
Data Output Stream類用於將Java語言中的基本類型數據寫入輸出流,如byte、int、float和boolean等類型。該類定義了許多以write開頭,後面跟數據類型的方法,這些方法用於將指定數據類型的數據寫入輸出流,如下所示。
(1)writeBoolean():寫boolean類型數據。
(2)writeByte():寫byte類型數據。
(3)writeCliat():寫char類型數據。
(4)writeDouble():寫double類型數據。
(5)writeFloat():寫float類型數據。
(6)writeInt():寫int類型數據。
數據輸出流對象
(1)數據輸出流對象的創建
Data Output Stream(Output Stream out)創建一個數據輸出流對象,該對象需要一個輸出流作為參數來進行初始化,換句話說,數據輸出流是建立在其他輸出流的基礎之上。
(2)數據輸出流對象的使用
數據輸出流除了基礎過濾輸出流的所有方法外,還提供幾個新的寫數據的方法,主要是將基本類型的數據寫入到輸出流中去。
方法有void writeBoolean(boolean b),void writeInt(int i),void writeByte(byte b),void writeChar(int C),void writeShort(short s),void writeLong(long 1),void writeFloat(float f),void writeDouble(double b)和void writeUTF(String str)等方法。
需要注意的是這些方法的返回值都是空的,即不需要返回任何數據。
綜合上述知識,舉一個例子進行詳細說明。
/
dataoutputstreamDemo.java
Created by 申貴成on 2007年8月18日,下午7:40
this program is to demonstrate how to use the data outputstream!
/
importjava.io. ;
public class dataoutputstreamDemo
{
public static void main(String[ ]args)throws Exception
{
File file=new File(”shengc.dat”);
FileOutputStream fos=new FileOutputStream(me);
DataOutputStream dos=new DataOutputStream(fos);
boolean [ ] bs={true,false,true,false,true };
char [ ] chs={’s’,'h','e','n’,'g','c' };
byte [ ] bys={ (byte)120,(byte)23,(byte)(-24),(byte)89,(byte)113 };
short [ ] ss={ (short)(一234),(short)54,(short)(-240),(short)2345,(short)2000 };
int [ ] ints={1234,2345,5678,6789,7890 };
long [ ] ls={12345,23456,34567,45678,56789 };
float [ ] fs={1234.5f,2345.5f,5678f,1234556.5f,23423.0f };
double [ ] ds={1234.6,234234.0,23423423.0,123121231.0,123123123.0f };
String [ ] strs={"hello”,”how are you”,”i am fine”,”thank you”,”and you”};
for(int i=0;i<5;i++)
{
dos.writeBoolean(bs [i] );
dos.writeChar(chs [i] );
dos.writeByte(bys [i] );
dos.writeShort(ss [i] );
dos.writeInt(ints [i] );
dos.writeLong(ls [i] );
dos.writeFloat(fs [i] );
dos.writeDouble(ds [i] );
dos.writeUTF(strs [i] );
}
dos.flush();
fos.close();
dos.close();
}
}
數據輸入流
(1)定義
數據輸入流是過濾輸入流的子類,它不僅提供了過濾輸入流的所有方法,而且還提供自己的新方法,來進行基本類型數據的讀取工作。需要注意的是數據輸入流雖然能夠進行基本類型讀取,但是它還是位元組流。
(2)數據輸入流對象的創建
該類只有一個構造方法,即public DatalnputStream(InputStream in),它以一個指定的輸入流為對象,為參數創建一個數據輸入流對象。需要注意的是數據輸入流是建立在其他輸入流的基礎之上。
(3)數據輸入流對象的使用
數據輸入流對象除了具有過濾輸入對象的所有方法外,它還具有以下讀取基本類型的方法,它們分別是boolean readBoolean(),char readChar(),double readDouble(),floatreadFloat(),int readInt(),long readLong(),short readShort()等方法,這些方法能夠直接從數據輸入流讀取基本類型數據。
另外還有幾個讀取非負數據類型的方法,如int readUnsignedByte(),int readUnsigned-Short(),String readUTF()等方法,來讀取數據。
過濾輸出流
過濾流分為過濾輸入流和過濾輸出流。過濾流實現了對一個已經存在的流的連線和封裝,通過所封裝的流的功能調用實現數據讀/寫功能。
過濾輸出流除了從檔案輸出流繼承了其所有方法外還添加了基本數據類型的寫入方法,下面分別列出:
write(byte[ ]) ;從位元組數組寫人數據。
write(byte[ ],int,int) ;從位元組數組寫入部分數據。
writeBoolean(boolean v) ;寫入一個布爾值。
writeByte(int v) ;寫入一個8位位元組(去掉位元組的高8位)。
wfiteBytes(String s) ;寫入一個8位的字元串(去掉每個字元的高8位)。
writeChar(int v) ;寫入一個16位字元。
writeChars(String s) ;寫入一個8位字元串。
writeDouble(double v) ;寫入一個64位雙精度數。
writeInt(int v) ;寫入一個32位整數。
writelong(10ng v) ;寫入一個64位長整數。
write.Short(int v) ;寫入一個16位短整數。
writeUTF(Stri城sty) ;寫入一個UrF格式的字元串。