ByteArrayOutputStream dos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(dos));
out.writeDouble(point);
out.writeInt(num);
out.writeUTF(str);
out.writeUTF(str02);
dos.flush(); // 錯誤順序
b2 = dos.toByteArray();
結果讀取時資料不完整或亂碼。
DataOutputStream 內部有緩衝 (透過 BufferedOutputStream),資料尚在 out 緩衝區,**未寫入底層 dos**。呼叫 dos.flush() 無效,必須先 out.flush()。
out.writeUTF(str02);
out.flush(); // 1. 先 flush DataOutputStream,資料才進入 dos
dos.flush(); // 2. 再 flush ByteArrayOutputStream (可選,通常無緩衝)
b2 = dos.toByteArray();
public static byte[] write() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (DataOutputStream out = new DataOutputStream(baos)) { // try-with-resources 自動 close/flush
out.writeDouble(3.14159);
out.writeInt(2628);
out.writeUTF("我是汪洋");
out.writeUTF("劉林是我同學");
}
return baos.toByteArray();
}