Java 中的數據流:
對於某問題:將一個 long 類型的數據寫到文件中,有辦法嗎?
轉字符串 → 通過 getbytes() 寫進去,費勁,而且在此過程中 long 類型的數需要不斷地轉換.
現在,Java 中的數據流能夠很好的解決這個問題(不需要轉換,直接寫進去)
1. DataInputStream 與 DataOutputStream 分別繼承自 InputStream、OutputStream, 它屬於處理流,需要分別套接在 InputStream、OutputStream 類型的節點流上面.
2. DataInputStream 與 DataOutputStream 提供了可以存取與機器無關的 java 原始類型數據(如:int, double 等)的方法.
3. DataInputStream 與 DataOutputStream 的構造方法為:
DataInputStream(InputStream in )
DataOutputStream(OutputStram out)
【注】UTF(Unicode 字符串):網絡上經常使用;UTF-8 比 UTF-16 省空間.
Demo_1:
import java.io.*;
class Test {
public static void main(String[] args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 首先在內存上面分配一個字節數組,某根管道接上去(接在內存上面的一塊內容上面)
DataOutputStream dos = new DataOutputStream(baos); // baos管道不好用,外那再套接一根管道dos
try {
dos.writeDouble(Math.random());
dos.writeBoolean(false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); // 通過baos的toByteArray()就能夠拿到關於這個數組的引用
System.out.println(bais.available()); // bais中有多少個字節可供讀;
DataInputStream dis = new DataInputStream(bais); // 從字節數組中讀的時候,里面是什么(字符串嗎?...不清楚),故需要再套接一層管道
System.out.println(dis.readDouble()); // 先寫先讀
System.out.println(dis.readBoolean());
dos.close();
baos.close();
dis.close();
bais.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
運行結果:
9
0.1088353250890215
false
