io流以及一些多線程的定義
標準輸入輸出流
標準輸入流
源數據源是標準輸入設備(鍵盤、鼠標、觸摸屏)等輸入設備。在java中用System.in 得到一個InputStream字節輸入流。
標準輸入流以字節流流入內存,如果在控制臺中輸入字符,字符以默認編碼(win簡體:gbk)編碼成字節進入標準輸入流。
標準輸出流(PrintStream)
數據目的地是標準輸出設備(顯示器)等輸出設備。在java中用System.out得到一個PrintStream 字節輸出流(字節打印流)。提供了更強大的
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流以及一些多線程的定義