Java中I/O流之數據流


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM