1. 程式人生 > >io流以及一些多線程的定義

io流以及一些多線程的定義

接口 鼠標 ima 打印 exc 序列化 txt 所有 保存

標準輸入輸出流

標準輸入流

數據源是標準輸入設備(鍵盤鼠標、觸摸屏)輸入設備。在java中用System.in 得到一個InputStream字節輸入流

標準輸入流以字節流流入內存,如果在控制臺中輸入字符,字符以默認編碼(win簡體:gbk)編碼成字節進入標準輸入流。

標準輸出流(PrintStream)

數據目的地是標準輸出設備(顯示器)輸出設備。在java中用System.out得到一個PrintStream 輸出流(字節打印流)。提供了更強大的

print

println

打印方法用於打印各種數據類型。

序列化

內存中的對象永久保存到硬盤的過程稱為對象序列化也叫做持久化。

硬盤持久化的內存恢復的內存的過程稱為對象反序列化。

1 Serializable

類通過實現 java.io.Serializable 接口以啟用其序列化功能。未實現此接口的類將無法使其任何狀態序列化或反序列化,拋出異常

Serializable接口沒有方法或字段,僅用於標識可序列化的語義

public class Student implements Serializable{

}

序列化對象

ObjectOutputStream 繼承於OutputStream,專門用於把對象序列化到本地。

提供

writeXXX

writeObject() 用於寫入一個對象

public static void main(String[] args) throws IOException {

Student stu = new Student("001", "大狗", 20, Gender.);

/**

* 方案1:stu所有的屬性,通過特定的字符串(-),把各個屬性值連接起來

* 001-大狗-20-

*/

File file = new File("d:\\javatest\\l.txt");

FileOutputStream out = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(out);

oos.writeObject(stu);

oos.close();

out.close();

}

序列化對象

ObjectInputStream 繼承於InputStream ,專門用於把本地持久化內容反序列化到內存,提供了

readXXX

readObject() 用於讀取一個序列化內容並返回一個對象。

public static void main(String[] args) throws IOException, ClassNotFoundException {

File file = new File("d:\\javatest\\l.txt");

FileInputStream in = new FileInputStream(file);

ObjectInputStream ois = new ObjectInputStream(in);

Student student = (Student) ois.readObject();

System.out.println(student.getId());

System.out.println(student.getName());

System.out.println(student.getAge());

System.out.println(student.getGender());

ois.close();

in.close();

}

序列化版本

序列化完成後,後期升級程序中的類(Student),此時再反序列化時會出現異常

異常原因:序列化流的serialVersionUID和升級後類的版本不匹配。

解決方案:Student類加序列化版本號有兩種方式

default serial version ID 生成默認的serial version ID 一般值都是1L

generated serial version ID 根據當前類的屬性、方法生成一個唯一ID

技術分享圖片

DataInputStream/DataOutputStream

DataOutputStream 繼承OutputStream,專門用於把基本java數據類型寫入輸出流提供writeXXX 寫入基本java數據類型

DataInputStream 繼承InputStream允許應用程序以與機器無關方式從底層輸入流中讀取基本 Java 數據類型。

DataInputStream/DataOutputStream 特別適合讀取/寫入在網絡傳輸過程中的數據流。

public static void main(String[] args) throws IOException {

File file = new File("d:\\javatest\\n.txt");

FileOutputStream out= new FileOutputStream(file);

DataOutputStream dos = new DataOutputStream(out);

dos.writeInt(10);

dos.writeUTF("hello中國");

dos.close();

out.close();

System.out.println("寫入完成");

}

讀取基本java數據類型

public static void main(String[] args) throws IOException {

File file = new File("d:\\javatest\\n.txt");

FileInputStream in = new FileInputStream(file);

DataInputStream dis = new DataInputStream(in);

int a = dis.readInt();

String str = dis.readUTF();

System.out.println(a);

System.out.println(str);

}

什麽順序寫入基本java數據類型,就以什麽順序讀取基本java數據類型。

2多線程

程序和進程

程序就是一堆靜態的代碼,存儲在硬盤上。程序如果不運行,本質就是一個文件。

程序一次運行產生進程進程一直向前運行,直到進程結束。

技術分享圖片

io流以及一些多線程的定義