想要查看此教程的目錄請點(diǎn)擊:Java IO教程目錄貼地址
DataInputStream可以讓你從InputStream讀取Java基本類型來代替原始的字節(jié)。用DataInputStream來包裝InputStream,你就可以從DataInputStream直接以Java基本類型來讀取數(shù)據(jù)。這就是為什么叫做DataInputStream。
如果你需要讀取的數(shù)據(jù)是由大于一個字節(jié)的java基礎(chǔ)類型構(gòu)成,比如int, long, float, double等,那么用DataInputStream是很方便的。DataInputStream希望的數(shù)據(jù)是寫入到網(wǎng)絡(luò)的有序多字節(jié)數(shù)據(jù)。
你經(jīng)常會使用一個DataInputStream去讀DataOutputStream寫好的數(shù)據(jù)。
DataInputStream例子
下面是一個DataInputStream的例子:
DataInputStream dataInputStream = new DataInputStream(
new FileInputStream("binary.data"));
int aByte = input.read();
int anInt = input.readInt();
float aFloat = input.readFloat();
double aDouble = input.readDouble();
//etc.
input.close();
例子中首先創(chuàng)建了一個DataInputStream實(shí)例并發(fā)數(shù)據(jù)源FileInputStream實(shí)例傳進(jìn)去。然后Java基本類型就可以讀出來了。
使用DataInputStream時同時使用DataOutputStream
就像上面提及的,DataInputStream和DataOutputStream經(jīng)常同時被使用。因此我只是想給你展示一個例子,先用DataOutputStream來寫數(shù)據(jù)然后再用DataInputStream來讀數(shù)據(jù)。下面是相關(guān)的Java代碼:
import java.io.*;
public class DataInputStreamExample {
public static void main(String[] args) throws IOException {
DataOutputStream dataOutputStream =
new DataOutputStream(
new FileOutputStream("data/data.bin"));
dataOutputStream.writeInt(123);
dataOutputStream.writeFloat(123.45F);
dataOutputStream.writeLong(789);
dataOutputStream.close();
DataInputStream dataInputStream =
new DataInputStream(
new FileInputStream("data/data.bin"));
int int123 = dataInputStream.readInt();
float float12345 = dataInputStream.readFloat();
long long789 = dataInputStream.readLong();
dataInputStream.close();
System.out.println("int123 = " + int123);
System.out.println("float12345 = " + float12345);
System.out.println("long789 = " + long789);
}
}
這個例子首先創(chuàng)建了一個DataOutputStream,寫int,float和long值。然后創(chuàng)建DataInputStream實(shí)例去同一個文件讀int, float和long值。
reads the int, float and long value in from the same file.
關(guān)閉DataInputStream
讀取完數(shù)據(jù)的時候,你要記住去關(guān)閉它。關(guān)閉DataInputStream也會關(guān)閉它讀的InputStream。這些需要調(diào)用close()方法:
dataInputStream.close();
你也可以在Java7中使用try-with-resources結(jié)構(gòu)。下面是介紹如何使用try-with-resources結(jié)構(gòu)來關(guān)閉流:
InputStream input = new FileInputStream("data/data.bin");
try(DataInputStream dataInputStream =
new DataInputStream(input)){
int data = dataInputStream.readInt();
int int123 = dataInputStream.readInt();
float float12345 = dataInputStream.readFloat();
long long789 = dataInputStream.readLong();
}
注意這并沒有任何顯式的調(diào)用close()方法。
也要注意創(chuàng)建FileInputStream示例并沒有放在try-with-resources代碼塊里。這意味著try-with-resources并不會自動關(guān)閉FileInputStream。然而,當(dāng)DataInputStream被關(guān)閉后它也會關(guān)閉它讀的InputStream,所以FileInputStream也會在DataInputStream關(guān)閉后被關(guān)閉。